From ea6bc4d8ce5734b9167fde917d5e0c8d406925ac Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Mon, 25 Apr 2016 01:05:19 +0200 Subject: [PATCH] bgfx: Ported xBR shaders from libretro. [Ryan Holtz, Hyllian] --- bgfx/chains/default.json | 11 +- .../super-eagle.json} | 2 +- bgfx/chains/{ => hqx}/hq2x.json | 2 +- bgfx/chains/{ => hqx}/hq3x.json | 2 +- bgfx/chains/{ => hqx}/hq4x.json | 2 +- bgfx/chains/unfiltered.json | 15 +- bgfx/chains/{ => xbr}/super-2xbr-3d-2p.json | 0 .../{ => xbr}/super-2xbr-3d-3p-smoother.json | 0 bgfx/chains/{ => xbr}/super-4xbr-3d-4p.json | 0 .../{ => xbr}/super-4xbr-3d-6p-smoother.json | 0 bgfx/chains/{ => xbr}/super-xbr-2p.json | 0 .../{ => xbr}/super-xbr-3p-smoother.json | 0 bgfx/chains/{ => xbr}/super-xbr-6p.json | 0 .../{ => xbr}/super-xbr-deposterize.json | 0 bgfx/chains/{ => xbr}/super-xbr-fast-3p.json | 0 bgfx/chains/{ => xbr}/super-xbr-fast-6p.json | 0 bgfx/chains/xbr/xbr-hybrid.json | 48 +++ bgfx/chains/xbr/xbr-lv1-noblend.json | 42 +++ bgfx/chains/xbr/xbr-lv2-3d.json | 42 +++ .../xbr/xbr-lv2-accuracy-multipass.json | 59 +++ .../xbr/xbr-lv2-accuracy-smart-blur.json | 47 +++ bgfx/chains/xbr/xbr-lv2-deposterize.json | 41 +++ bgfx/chains/xbr/xbr-lv2-fast.json | 57 +++ bgfx/chains/xbr/xbr-lv2-multipass.json | 60 +++ bgfx/chains/xbr/xbr-lv2-noblend.json | 57 +++ bgfx/chains/xbr/xbr-lv2.json | 57 +++ bgfx/chains/xbr/xbr-lv3-multipass.json | 60 +++ bgfx/chains/xbr/xbr-lv3-noblend.json | 42 +++ bgfx/chains/xbr/xbr-lv3.json | 42 +++ bgfx/chains/xbr/xbr-mlv4-dilation.json | 98 +++++ bgfx/chains/xbr/xbr-mlv4-multipass.json | 83 +++++ bgfx/effects/blurs/smart-blur.json | 55 +++ .../{supereagle => eagle}/supereagle.json | 4 +- bgfx/effects/{hq2x => hqx}/hq2x.json | 4 +- bgfx/effects/{hq3x => hqx}/hq3x.json | 4 +- bgfx/effects/{hq4x => hqx}/hq4x.json | 4 +- bgfx/effects/supereagle/blit.json | 121 ------- .../warp/dilation-horizontal-fast.json | 54 +++ .../xbr/xbr-hybrid/2xbr-hybrid-sharp.json | 35 ++ .../xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json | 35 ++ .../xbr/xbr-hybrid/2xbr-hybrid-v2.json | 35 ++ .../xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json | 35 ++ .../xbr/xbr-hybrid/2xbr-hybrid-v4.json | 35 ++ .../xbr/xbr-hybrid/2xbr-hybrid-v4b.json | 35 ++ .../xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json | 35 ++ bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json | 35 ++ bgfx/effects/xbr/xbr-lv1-noblend.json | 56 +++ bgfx/effects/xbr/xbr-lv2-3d.json | 60 +++ bgfx/effects/xbr/xbr-lv2-fast.json | 58 +++ .../xbr-lv2-multipass/xbr-lv2-a-pass0.json | 54 +++ .../xbr-lv2-accuracy-pass0.json | 56 +++ .../xbr-lv2-accuracy-pass1.json | 57 +++ .../xbr-lv2-multipass/xbr-lv2-b-pass0.json | 54 +++ .../xbr-lv2-multipass/xbr-lv2-c-pass0.json | 54 +++ .../xbr-lv2-multipass/xbr-lv2-d-pass0.json | 54 +++ .../xbr-lv2-noblend-pass1.json | 56 +++ .../xbr/xbr-lv2-multipass/xbr-lv2-pass1.json | 57 +++ bgfx/effects/xbr/xbr-lv2-noblend.json | 56 +++ bgfx/effects/xbr/xbr-lv2.json | 58 +++ .../xbr/xbr-lv3-multipass/xbr-lv3-pass0.json | 54 +++ .../xbr/xbr-lv3-multipass/xbr-lv3-pass1.json | 57 +++ bgfx/effects/xbr/xbr-lv3-noblend.json | 58 +++ bgfx/effects/xbr/xbr-lv3.json | 62 ++++ .../xbr-mlv4-multipass/xbr-mlv4-pass1.json | 54 +++ .../xbr-mlv4-multipass/xbr-mlv4-pass2.json | 54 +++ .../xbr-mlv4-multipass/xbr-mlv4-pass3.json | 55 +++ .../xbr-mlv4-multipass/xbr-mlv4-pass4.json | 56 +++ .../dx11/chains/blurs/fs_smart-blur.bin | Bin 0 -> 2281 bytes .../vs_hq2x.bin => blurs/vs_smart-blur.bin} | Bin .../chains/{supereagle => eagle}/fs_eagle.bin | Bin .../chains/{supereagle => eagle}/vs_eagle.bin | Bin .../dx11/chains/{hq2x => hqx}/fs_hq2x.bin | Bin .../dx11/chains/{hq3x => hqx}/fs_hq3x.bin | Bin .../dx11/chains/{hq4x => hqx}/fs_hq4x.bin | Bin .../{hq3x/vs_hq3x.bin => hqx/vs_hq2x.bin} | Bin .../{hq4x/vs_hq4x.bin => hqx/vs_hq3x.bin} | Bin bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin | Bin 0 -> 909 bytes .../dx11/chains/super-4xbr-3d-4p/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/super-4xbr-3d-4p/vs_blit.bin | Bin 575 -> 0 bytes .../super-4xbr-3d-6p-smoother/fs_blit.bin | Bin 396 -> 0 bytes .../super-4xbr-3d-6p-smoother/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/supereagle/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/supereagle/vs_blit.bin | Bin 575 -> 0 bytes .../warp/fs_dilation-horizontal-fast.bin | Bin 0 -> 588 bytes .../warp/vs_dilation-horizontal-fast.bin | Bin 0 -> 705 bytes .../dx11/chains/xbr-hybrid/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-hybrid/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-lv1-noblend/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-lv1-noblend/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-lv2-3d/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-lv2-3d/vs_blit.bin | Bin 575 -> 0 bytes .../xbr-lv2-accuracy-multipass/fs_blit.bin | Bin 396 -> 0 bytes .../xbr-lv2-accuracy-multipass/vs_blit.bin | Bin 575 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/fs_blit.bin | Bin 396 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/vs_blit.bin | Bin 575 -> 0 bytes .../chains/xbr-lv2-deposterize/fs_blit.bin | Bin 396 -> 0 bytes .../chains/xbr-lv2-deposterize/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-lv2-fast/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-lv2-fast/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-lv2-multipass/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-lv2-multipass/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-lv2-noblend/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-lv2-noblend/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-lv3-multipass/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-lv3-multipass/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-lv3-noblend/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-lv3-noblend/vs_blit.bin | Bin 575 -> 0 bytes bgfx/shaders/dx11/chains/xbr-lv3/fs_blit.bin | Bin 396 -> 0 bytes bgfx/shaders/dx11/chains/xbr-lv3/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr-mlv4-dilation/fs_blit.bin | Bin 396 -> 0 bytes .../dx11/chains/xbr-mlv4-dilation/vs_blit.bin | Bin 575 -> 0 bytes .../chains/xbr-mlv4-multipass/fs_blit.bin | Bin 396 -> 0 bytes .../chains/xbr-mlv4-multipass/vs_blit.bin | Bin 575 -> 0 bytes .../dx11/chains/xbr/fs_xbr-lv2-noblend.bin | Bin 0 -> 5120 bytes .../dx11/chains/xbr/fs_xbr-lv3-noblend.bin | Bin 0 -> 6332 bytes bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin | Bin 0 -> 8481 bytes .../dx11/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 0 -> 1337 bytes .../dx11/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 0 -> 1337 bytes bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3.bin | Bin 0 -> 1337 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin | Bin 0 -> 11017 bytes .../xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 9249 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin | Bin 0 -> 8969 bytes .../xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 9293 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin | Bin 0 -> 8853 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin | Bin 0 -> 8433 bytes .../xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 9553 bytes .../chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin | Bin 0 -> 11465 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 0 -> 1337 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 1337 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 0 -> 1337 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 1337 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 0 -> 1337 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 0 -> 1337 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 1337 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 0 -> 1337 bytes .../xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin | Bin 0 -> 3587 bytes .../fs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 11735 bytes .../fs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 4839 bytes .../xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin | Bin 0 -> 4143 bytes .../xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin | Bin 0 -> 4419 bytes .../xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin | Bin 0 -> 4531 bytes .../fs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 3084 bytes .../xbr-lv2-multipass/fs_xbr-lv2-pass1.bin | Bin 0 -> 3714 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 0 -> 1337 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 1337 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 829 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 0 -> 1337 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 0 -> 1337 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 0 -> 1337 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 829 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 0 -> 829 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass0.bin | Bin 0 -> 9331 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass1.bin | Bin 0 -> 5449 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 0 -> 1337 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 0 -> 893 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin | Bin 0 -> 13896 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin | Bin 0 -> 6163 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin | Bin 0 -> 4519 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin | Bin 0 -> 7044 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin | Bin 0 -> 673 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 0 -> 1337 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin | Bin 0 -> 705 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin | Bin 0 -> 705 bytes .../dx9/chains/blurs/fs_smart-blur.bin | Bin 0 -> 1366 bytes .../vs_hq2x.bin => blurs/vs_smart-blur.bin} | Bin .../chains/{supereagle => eagle}/fs_eagle.bin | Bin .../chains/{supereagle => eagle}/vs_eagle.bin | Bin .../dx9/chains/{hq2x => hqx}/fs_hq2x.bin | Bin .../dx9/chains/{hq3x => hqx}/fs_hq3x.bin | Bin .../dx9/chains/{hq4x => hqx}/fs_hq4x.bin | Bin .../{hq3x/vs_hq3x.bin => hqx/vs_hq2x.bin} | Bin .../{hq4x/vs_hq4x.bin => hqx/vs_hq3x.bin} | Bin bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin | Bin 0 -> 576 bytes .../dx9/chains/super-4xbr-3d-4p/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/super-4xbr-3d-4p/vs_blit.bin | Bin 330 -> 0 bytes .../super-4xbr-3d-6p-smoother/fs_blit.bin | Bin 241 -> 0 bytes .../super-4xbr-3d-6p-smoother/vs_blit.bin | Bin 330 -> 0 bytes .../shaders/dx9/chains/supereagle/fs_blit.bin | Bin 241 -> 0 bytes .../shaders/dx9/chains/supereagle/vs_blit.bin | Bin 330 -> 0 bytes .../warp/fs_dilation-horizontal-fast.bin | Bin 0 -> 357 bytes .../warp/vs_dilation-horizontal-fast.bin | Bin 0 -> 468 bytes .../shaders/dx9/chains/xbr-hybrid/fs_blit.bin | Bin 241 -> 0 bytes .../shaders/dx9/chains/xbr-hybrid/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-lv1-noblend/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-lv1-noblend/vs_blit.bin | Bin 330 -> 0 bytes .../shaders/dx9/chains/xbr-lv2-3d/fs_blit.bin | Bin 241 -> 0 bytes .../shaders/dx9/chains/xbr-lv2-3d/vs_blit.bin | Bin 330 -> 0 bytes .../xbr-lv2-accuracy-multipass/fs_blit.bin | Bin 241 -> 0 bytes .../xbr-lv2-accuracy-multipass/vs_blit.bin | Bin 330 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/fs_blit.bin | Bin 241 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/vs_blit.bin | Bin 330 -> 0 bytes .../chains/xbr-lv2-deposterize/fs_blit.bin | Bin 241 -> 0 bytes .../chains/xbr-lv2-deposterize/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-lv2-fast/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-lv2-fast/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-lv2-multipass/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-lv2-multipass/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-lv2-noblend/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-lv2-noblend/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-lv3-multipass/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-lv3-multipass/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-lv3-noblend/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-lv3-noblend/vs_blit.bin | Bin 330 -> 0 bytes bgfx/shaders/dx9/chains/xbr-lv3/fs_blit.bin | Bin 241 -> 0 bytes bgfx/shaders/dx9/chains/xbr-lv3/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-mlv4-dilation/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-mlv4-dilation/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr-mlv4-multipass/fs_blit.bin | Bin 241 -> 0 bytes .../dx9/chains/xbr-mlv4-multipass/vs_blit.bin | Bin 330 -> 0 bytes .../dx9/chains/xbr/fs_xbr-lv2-noblend.bin | Bin 0 -> 2537 bytes .../dx9/chains/xbr/fs_xbr-lv3-noblend.bin | Bin 0 -> 3177 bytes bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin | Bin 0 -> 4406 bytes .../dx9/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 0 -> 780 bytes .../dx9/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 0 -> 780 bytes bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin | Bin 0 -> 780 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin | Bin 0 -> 4954 bytes .../xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 4874 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin | Bin 0 -> 4626 bytes .../xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 5026 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin | Bin 0 -> 4562 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin | Bin 0 -> 4402 bytes .../xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 5310 bytes .../chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin | Bin 0 -> 5074 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 0 -> 780 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 780 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 0 -> 780 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 780 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 0 -> 780 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 0 -> 780 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 780 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 0 -> 780 bytes .../xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin | Bin 0 -> 1880 bytes .../fs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 6096 bytes .../fs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 3044 bytes .../xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin | Bin 0 -> 2044 bytes .../xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin | Bin 0 -> 2156 bytes .../xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin | Bin 0 -> 2252 bytes .../fs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 1901 bytes .../xbr-lv2-multipass/fs_xbr-lv2-pass1.bin | Bin 0 -> 2283 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 0 -> 780 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 780 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 532 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 0 -> 780 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 0 -> 780 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 0 -> 780 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 532 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 0 -> 532 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass0.bin | Bin 0 -> 4448 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass1.bin | Bin 0 -> 3882 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 0 -> 780 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 0 -> 604 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin | Bin 0 -> 6769 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin | Bin 0 -> 3676 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin | Bin 0 -> 3512 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin | Bin 0 -> 4677 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin | Bin 0 -> 432 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 0 -> 780 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin | Bin 0 -> 468 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin | Bin 0 -> 468 bytes .../gles/chains/blurs/fs_smart-blur.bin | Bin 0 -> 3295 bytes .../gles/chains/blurs/vs_smart-blur.bin | Bin 0 -> 1178 bytes .../chains/{supereagle => eagle}/fs_eagle.bin | Bin .../chains/{supereagle => eagle}/vs_eagle.bin | Bin .../gles/chains/{hq2x => hqx}/fs_hq2x.bin | Bin .../gles/chains/{hq3x => hqx}/fs_hq3x.bin | Bin .../gles/chains/{hq4x => hqx}/fs_hq4x.bin | Bin .../gles/chains/{hq2x => hqx}/vs_hq2x.bin | Bin .../gles/chains/{hq3x => hqx}/vs_hq3x.bin | Bin .../gles/chains/{hq4x => hqx}/vs_hq4x.bin | Bin .../gles/chains/super-4xbr-3d-4p/fs_blit.bin | Bin 238 -> 0 bytes .../super-4xbr-3d-6p-smoother/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/supereagle/fs_blit.bin | Bin 232 -> 0 bytes .../gles/chains/supereagle/vs_blit.bin | Bin 413 -> 0 bytes .../warp/fs_dilation-horizontal-fast.bin | Bin 0 -> 433 bytes .../vs_dilation-horizontal-fast.bin} | Bin 419 -> 622 bytes .../gles/chains/xbr-hybrid/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv1-noblend/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv2-3d/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv2-3d/vs_blit.bin | Bin 419 -> 0 bytes .../xbr-lv2-accuracy-multipass/fs_blit.bin | Bin 238 -> 0 bytes .../xbr-lv2-accuracy-multipass/vs_blit.bin | Bin 419 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/fs_blit.bin | Bin 238 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/vs_blit.bin | Bin 419 -> 0 bytes .../chains/xbr-lv2-deposterize/fs_blit.bin | Bin 238 -> 0 bytes .../chains/xbr-lv2-deposterize/vs_blit.bin | Bin 419 -> 0 bytes .../gles/chains/xbr-lv2-fast/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv2-fast/vs_blit.bin | Bin 419 -> 0 bytes .../gles/chains/xbr-lv2-multipass/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv2-multipass/vs_blit.bin | Bin 419 -> 0 bytes .../gles/chains/xbr-lv2-noblend/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv2-noblend/vs_blit.bin | Bin 419 -> 0 bytes .../gles/chains/xbr-lv3-multipass/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv3-multipass/vs_blit.bin | Bin 419 -> 0 bytes .../gles/chains/xbr-lv3-noblend/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-lv3-noblend/vs_blit.bin | Bin 419 -> 0 bytes bgfx/shaders/gles/chains/xbr-lv3/fs_blit.bin | Bin 238 -> 0 bytes bgfx/shaders/gles/chains/xbr-lv3/vs_blit.bin | Bin 419 -> 0 bytes .../gles/chains/xbr-mlv4-dilation/fs_blit.bin | Bin 238 -> 0 bytes .../gles/chains/xbr-mlv4-dilation/vs_blit.bin | Bin 419 -> 0 bytes .../chains/xbr-mlv4-multipass/fs_blit.bin | Bin 238 -> 0 bytes .../chains/xbr-mlv4-multipass/vs_blit.bin | Bin 419 -> 0 bytes .../gles/chains/xbr/fs_xbr-lv2-noblend.bin | Bin 0 -> 7137 bytes .../gles/chains/xbr/fs_xbr-lv3-noblend.bin | Bin 0 -> 8802 bytes bgfx/shaders/gles/chains/xbr/fs_xbr-lv3.bin | Bin 0 -> 10312 bytes .../gles/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 0 -> 2087 bytes .../gles/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 0 -> 2087 bytes bgfx/shaders/gles/chains/xbr/vs_xbr-lv3.bin | Bin 0 -> 2087 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin | Bin 0 -> 12234 bytes .../xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 10045 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin | Bin 0 -> 9859 bytes .../xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 10981 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin | Bin 0 -> 10715 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin | Bin 0 -> 10237 bytes .../xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 10663 bytes .../chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin | Bin 0 -> 12528 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 0 -> 2087 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 2087 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 0 -> 2087 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 2087 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 0 -> 2087 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 0 -> 2087 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 2087 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 0 -> 2087 bytes .../xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin | Bin 0 -> 3517 bytes .../fs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 26226 bytes .../fs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 7804 bytes .../xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin | Bin 0 -> 4028 bytes .../xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin | Bin 0 -> 4252 bytes .../xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin | Bin 0 -> 4441 bytes .../fs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 5435 bytes .../xbr-lv2-multipass/fs_xbr-lv2-pass1.bin | Bin 0 -> 4663 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 0 -> 2087 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 2087 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 911 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 0 -> 2087 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 0 -> 2087 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 0 -> 2087 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 911 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 0 -> 911 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass0.bin | Bin 0 -> 12646 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass1.bin | Bin 0 -> 7085 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 0 -> 2087 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 0 -> 971 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin | Bin 0 -> 16672 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin | Bin 0 -> 10740 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin | Bin 0 -> 6336 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin | Bin 0 -> 8035 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin} | Bin 419 -> 543 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 0 -> 2087 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin} | Bin 419 -> 696 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin} | Bin 419 -> 696 bytes .../glsl/chains/blurs/fs_smart-blur.bin | Bin 0 -> 3176 bytes .../glsl/chains/blurs/vs_smart-blur.bin | Bin 0 -> 1082 bytes .../chains/{supereagle => eagle}/fs_eagle.bin | Bin .../chains/{supereagle => eagle}/vs_eagle.bin | Bin .../glsl/chains/{hq2x => hqx}/fs_hq2x.bin | Bin .../glsl/chains/{hq3x => hqx}/fs_hq3x.bin | Bin .../glsl/chains/{hq4x => hqx}/fs_hq4x.bin | Bin .../glsl/chains/{hq2x => hqx}/vs_hq2x.bin | Bin .../glsl/chains/{hq3x => hqx}/vs_hq3x.bin | Bin .../glsl/chains/{hq4x => hqx}/vs_hq4x.bin | Bin .../glsl/chains/super-4xbr-3d-4p/fs_blit.bin | Bin 181 -> 0 bytes .../super-4xbr-3d-6p-smoother/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/supereagle/fs_blit.bin | Bin 175 -> 0 bytes .../glsl/chains/supereagle/vs_blit.bin | Bin 371 -> 0 bytes .../warp/fs_dilation-horizontal-fast.bin | Bin 0 -> 416 bytes .../vs_dilation-horizontal-fast.bin} | Bin 377 -> 562 bytes .../glsl/chains/xbr-hybrid/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv1-noblend/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv2-3d/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv2-3d/vs_blit.bin | Bin 377 -> 0 bytes .../xbr-lv2-accuracy-multipass/fs_blit.bin | Bin 181 -> 0 bytes .../xbr-lv2-accuracy-multipass/vs_blit.bin | Bin 377 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/fs_blit.bin | Bin 181 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/vs_blit.bin | Bin 377 -> 0 bytes .../chains/xbr-lv2-deposterize/fs_blit.bin | Bin 181 -> 0 bytes .../chains/xbr-lv2-deposterize/vs_blit.bin | Bin 377 -> 0 bytes .../glsl/chains/xbr-lv2-fast/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv2-fast/vs_blit.bin | Bin 377 -> 0 bytes .../glsl/chains/xbr-lv2-multipass/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv2-multipass/vs_blit.bin | Bin 377 -> 0 bytes .../glsl/chains/xbr-lv2-noblend/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv2-noblend/vs_blit.bin | Bin 377 -> 0 bytes .../glsl/chains/xbr-lv3-multipass/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv3-multipass/vs_blit.bin | Bin 377 -> 0 bytes .../glsl/chains/xbr-lv3-noblend/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-lv3-noblend/vs_blit.bin | Bin 377 -> 0 bytes bgfx/shaders/glsl/chains/xbr-lv3/fs_blit.bin | Bin 181 -> 0 bytes bgfx/shaders/glsl/chains/xbr-lv3/vs_blit.bin | Bin 377 -> 0 bytes .../glsl/chains/xbr-mlv4-dilation/fs_blit.bin | Bin 181 -> 0 bytes .../glsl/chains/xbr-mlv4-dilation/vs_blit.bin | Bin 377 -> 0 bytes .../chains/xbr-mlv4-multipass/fs_blit.bin | Bin 181 -> 0 bytes .../chains/xbr-mlv4-multipass/vs_blit.bin | Bin 377 -> 0 bytes .../glsl/chains/xbr/fs_xbr-lv2-noblend.bin | Bin 0 -> 6880 bytes .../glsl/chains/xbr/fs_xbr-lv3-noblend.bin | Bin 0 -> 8509 bytes bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3.bin | Bin 0 -> 9927 bytes .../glsl/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 0 -> 1937 bytes .../glsl/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 0 -> 1937 bytes bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3.bin | Bin 0 -> 1937 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin | Bin 0 -> 11959 bytes .../xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 9714 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin | Bin 0 -> 9533 bytes .../xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 10600 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin | Bin 0 -> 10344 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin | Bin 0 -> 9866 bytes .../xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 10306 bytes .../chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin | Bin 0 -> 12253 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 0 -> 1937 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 1937 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 0 -> 1937 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 1937 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 0 -> 1937 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 0 -> 1937 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 1937 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 0 -> 1937 bytes .../xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin | Bin 0 -> 3354 bytes .../fs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 24877 bytes .../fs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 7419 bytes .../xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin | Bin 0 -> 3855 bytes .../xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin | Bin 0 -> 4079 bytes .../xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin | Bin 0 -> 4268 bytes .../fs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 5195 bytes .../xbr-lv2-multipass/fs_xbr-lv2-pass1.bin | Bin 0 -> 4455 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 0 -> 1937 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 1937 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 833 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 0 -> 1937 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 0 -> 1937 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 0 -> 1937 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 833 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 0 -> 833 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass0.bin | Bin 0 -> 12220 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass1.bin | Bin 0 -> 6782 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 0 -> 1937 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 0 -> 887 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin | Bin 0 -> 16257 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin | Bin 0 -> 10241 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin | Bin 0 -> 6079 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin | Bin 0 -> 7700 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin} | Bin 377 -> 489 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 0 -> 1937 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin} | Bin 377 -> 630 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin} | Bin 377 -> 630 bytes .../metal/chains/blurs/fs_smart-blur.bin | Bin 0 -> 4200 bytes .../metal/chains/blurs/vs_smart-blur.bin | Bin 0 -> 1487 bytes .../chains/{supereagle => eagle}/fs_eagle.bin | Bin .../chains/{supereagle => eagle}/vs_eagle.bin | Bin .../metal/chains/{hq2x => hqx}/fs_hq2x.bin | Bin .../metal/chains/{hq3x => hqx}/fs_hq3x.bin | Bin .../metal/chains/{hq4x => hqx}/fs_hq4x.bin | Bin .../metal/chains/{hq2x => hqx}/vs_hq2x.bin | Bin .../metal/chains/{hq3x => hqx}/vs_hq3x.bin | Bin .../metal/chains/{hq4x => hqx}/vs_hq4x.bin | Bin .../metal/chains/super-4xbr-3d-4p/fs_blit.bin | Bin 634 -> 0 bytes .../super-4xbr-3d-6p-smoother/fs_blit.bin | Bin 634 -> 0 bytes .../metal/chains/supereagle/fs_blit.bin | Bin 628 -> 0 bytes .../metal/chains/supereagle/vs_blit.bin | Bin 751 -> 0 bytes .../warp/fs_dilation-horizontal-fast.bin | Bin 0 -> 1058 bytes .../vs_dilation-horizontal-fast.bin} | Bin 757 -> 934 bytes .../metal/chains/xbr-hybrid/fs_blit.bin | Bin 634 -> 0 bytes .../metal/chains/xbr-lv1-noblend/fs_blit.bin | Bin 634 -> 0 bytes .../metal/chains/xbr-lv2-3d/fs_blit.bin | Bin 634 -> 0 bytes .../metal/chains/xbr-lv2-3d/vs_blit.bin | Bin 757 -> 0 bytes .../xbr-lv2-accuracy-multipass/fs_blit.bin | Bin 634 -> 0 bytes .../xbr-lv2-accuracy-multipass/vs_blit.bin | Bin 757 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/fs_blit.bin | Bin 634 -> 0 bytes .../xbr-lv2-accuracy-smart-blur/vs_blit.bin | Bin 757 -> 0 bytes .../chains/xbr-lv2-deposterize/fs_blit.bin | Bin 634 -> 0 bytes .../chains/xbr-lv2-deposterize/vs_blit.bin | Bin 757 -> 0 bytes .../metal/chains/xbr-lv2-fast/fs_blit.bin | Bin 634 -> 0 bytes .../metal/chains/xbr-lv2-fast/vs_blit.bin | Bin 757 -> 0 bytes .../chains/xbr-lv2-multipass/fs_blit.bin | Bin 634 -> 0 bytes .../chains/xbr-lv2-multipass/vs_blit.bin | Bin 757 -> 0 bytes .../metal/chains/xbr-lv2-noblend/fs_blit.bin | Bin 634 -> 0 bytes .../metal/chains/xbr-lv2-noblend/vs_blit.bin | Bin 757 -> 0 bytes .../chains/xbr-lv3-multipass/fs_blit.bin | Bin 634 -> 0 bytes .../chains/xbr-lv3-multipass/vs_blit.bin | Bin 757 -> 0 bytes .../metal/chains/xbr-lv3-noblend/fs_blit.bin | Bin 634 -> 0 bytes .../metal/chains/xbr-lv3-noblend/vs_blit.bin | Bin 757 -> 0 bytes bgfx/shaders/metal/chains/xbr-lv3/fs_blit.bin | Bin 634 -> 0 bytes bgfx/shaders/metal/chains/xbr-lv3/vs_blit.bin | Bin 757 -> 0 bytes .../chains/xbr-mlv4-dilation/fs_blit.bin | Bin 634 -> 0 bytes .../chains/xbr-mlv4-dilation/vs_blit.bin | Bin 757 -> 0 bytes .../chains/xbr-mlv4-multipass/fs_blit.bin | Bin 634 -> 0 bytes .../chains/xbr-mlv4-multipass/vs_blit.bin | Bin 757 -> 0 bytes .../metal/chains/xbr/fs_xbr-lv2-noblend.bin | Bin 0 -> 9021 bytes .../metal/chains/xbr/fs_xbr-lv3-noblend.bin | Bin 0 -> 10813 bytes bgfx/shaders/metal/chains/xbr/fs_xbr-lv3.bin | Bin 0 -> 11934 bytes .../metal/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 0 -> 2390 bytes .../metal/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 0 -> 2390 bytes bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin | Bin 0 -> 2390 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin | Bin 0 -> 14328 bytes .../xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 11703 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin | Bin 0 -> 11482 bytes .../xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 12680 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin | Bin 0 -> 12366 bytes .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin | Bin 0 -> 11908 bytes .../xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 12353 bytes .../chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin | Bin 0 -> 14638 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 0 -> 2390 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 0 -> 2390 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 0 -> 2390 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 0 -> 2390 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 0 -> 2390 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 0 -> 2390 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 0 -> 2390 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 0 -> 2390 bytes .../xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin | Bin 0 -> 5417 bytes .../fs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 27844 bytes .../fs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 8913 bytes .../xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin | Bin 0 -> 5867 bytes .../xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin | Bin 0 -> 6041 bytes .../xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin | Bin 0 -> 6242 bytes .../fs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 6381 bytes .../xbr-lv2-multipass/fs_xbr-lv2-pass1.bin | Bin 0 -> 5535 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 0 -> 2390 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 0 -> 2390 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 0 -> 1228 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 0 -> 2390 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 0 -> 2390 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 0 -> 2390 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 0 -> 1228 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 0 -> 1228 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass0.bin | Bin 0 -> 14649 bytes .../xbr-lv3-multipass/fs_xbr-lv3-pass1.bin | Bin 0 -> 8833 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 0 -> 2390 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 0 -> 1272 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin | Bin 0 -> 21489 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin | Bin 0 -> 13266 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin | Bin 0 -> 8048 bytes .../xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin | Bin 0 -> 9852 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin} | Bin 757 -> 857 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 0 -> 2390 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin} | Bin 757 -> 1004 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin} | Bin 757 -> 1004 bytes src/osd/modules/render/bgfx/chainmanager.cpp | 32 +- src/osd/modules/render/bgfx/chainmanager.h | 17 +- .../shaders/chains/blurs/fs_smart-blur.sc | 64 ++++ .../chains/{hq2x => blurs}/varying.def.sc | 0 .../shaders/chains/blurs/vs_smart-blur.sc | 48 +++ .../chains/{supereagle => eagle}/fs_eagle.sc | 0 .../{supereagle => eagle}/varying.def.sc | 0 .../chains/{supereagle => eagle}/vs_eagle.sc | 0 .../shaders/chains/{hq2x => hqx}/fs_hq2x.sc | 0 .../shaders/chains/{hq3x => hqx}/fs_hq3x.sc | 0 .../shaders/chains/{hq4x => hqx}/fs_hq4x.sc | 0 .../chains/{hq3x => hqx}/varying.def.sc | 0 .../shaders/chains/{hq2x => hqx}/vs_hq2x.sc | 0 .../shaders/chains/{hq3x => hqx}/vs_hq3x.sc | 0 .../shaders/chains/{hq4x => hqx}/vs_hq4x.sc | 0 .../chains/super-4xbr-3d-4p/fs_blit.sc | 14 - .../chains/super-4xbr-3d-4p/vs_blit.sc | 14 - .../super-4xbr-3d-6p-smoother/fs_blit.sc | 14 - .../super-4xbr-3d-6p-smoother/vs_blit.sc | 14 - .../bgfx/shaders/chains/supereagle/fs_blit.sc | 14 - .../bgfx/shaders/chains/supereagle/vs_blit.sc | 14 - .../warp/fs_dilation-horizontal-fast.sc | 46 +++ .../chains/{hq4x => warp}/varying.def.sc | 2 - .../warp/vs_dilation-horizontal-fast.sc | 51 +++ .../bgfx/shaders/chains/xbr-hybrid/fs_blit.sc | 14 - .../bgfx/shaders/chains/xbr-hybrid/vs_blit.sc | 14 - .../shaders/chains/xbr-lv1-noblend/fs_blit.sc | 14 - .../shaders/chains/xbr-lv1-noblend/vs_blit.sc | 14 - .../bgfx/shaders/chains/xbr-lv2-3d/fs_blit.sc | 14 - .../shaders/chains/xbr-lv2-3d/varying.def.sc | 10 - .../bgfx/shaders/chains/xbr-lv2-3d/vs_blit.sc | 14 - .../xbr-lv2-accuracy-multipass/fs_blit.sc | 14 - .../xbr-lv2-accuracy-multipass/varying.def.sc | 10 - .../xbr-lv2-accuracy-multipass/vs_blit.sc | 14 - .../xbr-lv2-accuracy-smart-blur/fs_blit.sc | 14 - .../varying.def.sc | 10 - .../xbr-lv2-accuracy-smart-blur/vs_blit.sc | 14 - .../chains/xbr-lv2-deposterize/fs_blit.sc | 14 - .../chains/xbr-lv2-deposterize/varying.def.sc | 10 - .../chains/xbr-lv2-deposterize/vs_blit.sc | 14 - .../shaders/chains/xbr-lv2-fast/fs_blit.sc | 14 - .../chains/xbr-lv2-fast/varying.def.sc | 10 - .../shaders/chains/xbr-lv2-fast/vs_blit.sc | 14 - .../chains/xbr-lv2-multipass/fs_blit.sc | 14 - .../chains/xbr-lv2-multipass/varying.def.sc | 10 - .../chains/xbr-lv2-multipass/vs_blit.sc | 14 - .../shaders/chains/xbr-lv2-noblend/fs_blit.sc | 14 - .../chains/xbr-lv2-noblend/varying.def.sc | 10 - .../shaders/chains/xbr-lv2-noblend/vs_blit.sc | 14 - .../chains/xbr-lv3-multipass/fs_blit.sc | 14 - .../chains/xbr-lv3-multipass/varying.def.sc | 10 - .../chains/xbr-lv3-multipass/vs_blit.sc | 14 - .../shaders/chains/xbr-lv3-noblend/fs_blit.sc | 14 - .../chains/xbr-lv3-noblend/varying.def.sc | 10 - .../shaders/chains/xbr-lv3-noblend/vs_blit.sc | 14 - .../bgfx/shaders/chains/xbr-lv3/fs_blit.sc | 14 - .../shaders/chains/xbr-lv3/varying.def.sc | 10 - .../bgfx/shaders/chains/xbr-lv3/vs_blit.sc | 14 - .../chains/xbr-mlv4-dilation/fs_blit.sc | 14 - .../chains/xbr-mlv4-dilation/varying.def.sc | 10 - .../chains/xbr-mlv4-dilation/vs_blit.sc | 14 - .../chains/xbr-mlv4-multipass/fs_blit.sc | 14 - .../chains/xbr-mlv4-multipass/varying.def.sc | 10 - .../chains/xbr-mlv4-multipass/vs_blit.sc | 14 - .../shaders/chains/xbr/fs_xbr-lv2-noblend.sc | 210 +++++++++++ .../shaders/chains/xbr/fs_xbr-lv3-noblend.sc | 234 ++++++++++++ .../bgfx/shaders/chains/xbr/fs_xbr-lv3.sc | 254 +++++++++++++ .../shaders/chains/xbr/vs_xbr-lv2-noblend.sc | 59 +++ .../shaders/chains/xbr/vs_xbr-lv3-noblend.sc | 60 +++ .../bgfx/shaders/chains/xbr/vs_xbr-lv3.sc | 60 +++ .../xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.sc | 336 +++++++++++++++++ .../xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.sc | 265 ++++++++++++++ .../xbr/xbr-hybrid/fs_2xbr-hybrid-v2.sc | 255 +++++++++++++ .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.sc | 281 +++++++++++++++ .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4.sc | 271 ++++++++++++++ .../xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.sc | 256 +++++++++++++ .../xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.sc | 288 +++++++++++++++ .../chains/xbr/xbr-hybrid/fs_2xbr-hybrid.sc | 341 ++++++++++++++++++ .../xbr-hybrid}/varying.def.sc | 3 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.sc | 72 ++++ .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.sc | 72 ++++ .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.sc | 72 ++++ .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.sc | 72 ++++ .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.sc | 72 ++++ .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.sc | 72 ++++ .../xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.sc | 72 ++++ .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.sc | 72 ++++ .../xbr-lv2-multipass/fs_xbr-lv2-a-pass0.sc | 159 ++++++++ .../fs_xbr-lv2-accuracy-pass0.sc | 174 +++++++++ .../fs_xbr-lv2-accuracy-pass1.sc | 160 ++++++++ .../xbr-lv2-multipass/fs_xbr-lv2-b-pass0.sc | 160 ++++++++ .../xbr-lv2-multipass/fs_xbr-lv2-c-pass0.sc | 158 ++++++++ .../xbr-lv2-multipass/fs_xbr-lv2-d-pass0.sc | 163 +++++++++ .../fs_xbr-lv2-noblend-pass1.sc | 162 +++++++++ .../xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.sc | 185 ++++++++++ .../xbr-lv2-multipass}/varying.def.sc | 3 + .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.sc | 60 +++ .../vs_xbr-lv2-accuracy-pass0.sc | 59 +++ .../vs_xbr-lv2-accuracy-pass1.sc | 55 +++ .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.sc | 60 +++ .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.sc | 60 +++ .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.sc | 60 +++ .../vs_xbr-lv2-noblend-pass1.sc | 54 +++ .../xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.sc | 56 +++ .../xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc | 216 +++++++++++ .../xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.sc | 180 +++++++++ .../xbr-lv3-multipass}/varying.def.sc | 3 + .../xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.sc | 60 +++ .../xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.sc | 55 +++ .../xbr-mlv4-multipass/fs_xbr-mlv4-pass1.sc | 208 +++++++++++ .../xbr-mlv4-multipass/fs_xbr-mlv4-pass2.sc | 235 ++++++++++++ .../xbr-mlv4-multipass/fs_xbr-mlv4-pass3.sc | 172 +++++++++ .../xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc | 164 +++++++++ .../xbr-mlv4-multipass}/varying.def.sc | 3 + .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.sc | 52 +++ .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.sc | 59 +++ .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.sc | 55 +++ .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.sc | 53 +++ 653 files changed, 9721 insertions(+), 762 deletions(-) rename bgfx/chains/{supereagle.json => eagle/super-eagle.json} (96%) rename bgfx/chains/{ => hqx}/hq2x.json (98%) rename bgfx/chains/{ => hqx}/hq3x.json (98%) rename bgfx/chains/{ => hqx}/hq4x.json (98%) rename bgfx/chains/{ => xbr}/super-2xbr-3d-2p.json (100%) rename bgfx/chains/{ => xbr}/super-2xbr-3d-3p-smoother.json (100%) rename bgfx/chains/{ => xbr}/super-4xbr-3d-4p.json (100%) rename bgfx/chains/{ => xbr}/super-4xbr-3d-6p-smoother.json (100%) rename bgfx/chains/{ => xbr}/super-xbr-2p.json (100%) rename bgfx/chains/{ => xbr}/super-xbr-3p-smoother.json (100%) rename bgfx/chains/{ => xbr}/super-xbr-6p.json (100%) rename bgfx/chains/{ => xbr}/super-xbr-deposterize.json (100%) rename bgfx/chains/{ => xbr}/super-xbr-fast-3p.json (100%) rename bgfx/chains/{ => xbr}/super-xbr-fast-6p.json (100%) create mode 100644 bgfx/chains/xbr/xbr-hybrid.json create mode 100644 bgfx/chains/xbr/xbr-lv1-noblend.json create mode 100644 bgfx/chains/xbr/xbr-lv2-3d.json create mode 100644 bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json create mode 100644 bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json create mode 100644 bgfx/chains/xbr/xbr-lv2-deposterize.json create mode 100644 bgfx/chains/xbr/xbr-lv2-fast.json create mode 100644 bgfx/chains/xbr/xbr-lv2-multipass.json create mode 100644 bgfx/chains/xbr/xbr-lv2-noblend.json create mode 100644 bgfx/chains/xbr/xbr-lv2.json create mode 100644 bgfx/chains/xbr/xbr-lv3-multipass.json create mode 100644 bgfx/chains/xbr/xbr-lv3-noblend.json create mode 100644 bgfx/chains/xbr/xbr-lv3.json create mode 100644 bgfx/chains/xbr/xbr-mlv4-dilation.json create mode 100644 bgfx/chains/xbr/xbr-mlv4-multipass.json create mode 100644 bgfx/effects/blurs/smart-blur.json rename bgfx/effects/{supereagle => eagle}/supereagle.json (90%) rename bgfx/effects/{hq2x => hqx}/hq2x.json (89%) rename bgfx/effects/{hq3x => hqx}/hq3x.json (89%) rename bgfx/effects/{hq4x => hqx}/hq4x.json (89%) delete mode 100644 bgfx/effects/supereagle/blit.json create mode 100644 bgfx/effects/warp/dilation-horizontal-fast.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json create mode 100644 bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json create mode 100644 bgfx/effects/xbr/xbr-lv1-noblend.json create mode 100644 bgfx/effects/xbr/xbr-lv2-3d.json create mode 100644 bgfx/effects/xbr/xbr-lv2-fast.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-a-pass0.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-b-pass0.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-c-pass0.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-d-pass0.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-noblend-pass1.json create mode 100644 bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json create mode 100644 bgfx/effects/xbr/xbr-lv2-noblend.json create mode 100644 bgfx/effects/xbr/xbr-lv2.json create mode 100644 bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json create mode 100644 bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json create mode 100644 bgfx/effects/xbr/xbr-lv3-noblend.json create mode 100644 bgfx/effects/xbr/xbr-lv3.json create mode 100644 bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json create mode 100644 bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json create mode 100644 bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json create mode 100644 bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json create mode 100644 bgfx/shaders/dx11/chains/blurs/fs_smart-blur.bin rename bgfx/shaders/dx11/chains/{hq2x/vs_hq2x.bin => blurs/vs_smart-blur.bin} (100%) rename bgfx/shaders/dx11/chains/{supereagle => eagle}/fs_eagle.bin (100%) rename bgfx/shaders/dx11/chains/{supereagle => eagle}/vs_eagle.bin (100%) rename bgfx/shaders/dx11/chains/{hq2x => hqx}/fs_hq2x.bin (100%) rename bgfx/shaders/dx11/chains/{hq3x => hqx}/fs_hq3x.bin (100%) rename bgfx/shaders/dx11/chains/{hq4x => hqx}/fs_hq4x.bin (100%) rename bgfx/shaders/dx11/chains/{hq3x/vs_hq3x.bin => hqx/vs_hq2x.bin} (100%) rename bgfx/shaders/dx11/chains/{hq4x/vs_hq4x.bin => hqx/vs_hq3x.bin} (100%) create mode 100644 bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin delete mode 100644 bgfx/shaders/dx11/chains/super-4xbr-3d-4p/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/super-4xbr-3d-4p/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/super-4xbr-3d-6p-smoother/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/super-4xbr-3d-6p-smoother/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/supereagle/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/supereagle/vs_blit.bin create mode 100644 bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.bin create mode 100644 bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-hybrid/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-hybrid/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv1-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv1-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-3d/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-3d/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-accuracy-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-accuracy-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-deposterize/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-deposterize/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-fast/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-fast/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv2-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv3-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv3-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv3-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv3-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv3/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-lv3/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-mlv4-dilation/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-mlv4-dilation/vs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-mlv4-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx11/chains/xbr-mlv4-multipass/vs_blit.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin create mode 100644 bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin create mode 100644 bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin rename bgfx/shaders/dx9/chains/{hq2x/vs_hq2x.bin => blurs/vs_smart-blur.bin} (100%) rename bgfx/shaders/dx9/chains/{supereagle => eagle}/fs_eagle.bin (100%) rename bgfx/shaders/dx9/chains/{supereagle => eagle}/vs_eagle.bin (100%) rename bgfx/shaders/dx9/chains/{hq2x => hqx}/fs_hq2x.bin (100%) rename bgfx/shaders/dx9/chains/{hq3x => hqx}/fs_hq3x.bin (100%) rename bgfx/shaders/dx9/chains/{hq4x => hqx}/fs_hq4x.bin (100%) rename bgfx/shaders/dx9/chains/{hq3x/vs_hq3x.bin => hqx/vs_hq2x.bin} (100%) rename bgfx/shaders/dx9/chains/{hq4x/vs_hq4x.bin => hqx/vs_hq3x.bin} (100%) create mode 100644 bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin delete mode 100644 bgfx/shaders/dx9/chains/super-4xbr-3d-4p/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/super-4xbr-3d-4p/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/super-4xbr-3d-6p-smoother/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/super-4xbr-3d-6p-smoother/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/supereagle/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/supereagle/vs_blit.bin create mode 100644 bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin create mode 100644 bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-hybrid/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-hybrid/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv1-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv1-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-3d/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-3d/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-accuracy-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-accuracy-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-deposterize/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-deposterize/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-fast/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-fast/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv2-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv3-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv3-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv3-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv3-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv3/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-lv3/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-mlv4-dilation/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-mlv4-dilation/vs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-mlv4-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/dx9/chains/xbr-mlv4-multipass/vs_blit.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin create mode 100644 bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin create mode 100644 bgfx/shaders/gles/chains/blurs/fs_smart-blur.bin create mode 100644 bgfx/shaders/gles/chains/blurs/vs_smart-blur.bin rename bgfx/shaders/gles/chains/{supereagle => eagle}/fs_eagle.bin (100%) rename bgfx/shaders/gles/chains/{supereagle => eagle}/vs_eagle.bin (100%) rename bgfx/shaders/gles/chains/{hq2x => hqx}/fs_hq2x.bin (100%) rename bgfx/shaders/gles/chains/{hq3x => hqx}/fs_hq3x.bin (100%) rename bgfx/shaders/gles/chains/{hq4x => hqx}/fs_hq4x.bin (100%) rename bgfx/shaders/gles/chains/{hq2x => hqx}/vs_hq2x.bin (100%) rename bgfx/shaders/gles/chains/{hq3x => hqx}/vs_hq3x.bin (100%) rename bgfx/shaders/gles/chains/{hq4x => hqx}/vs_hq4x.bin (100%) delete mode 100644 bgfx/shaders/gles/chains/super-4xbr-3d-4p/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/super-4xbr-3d-6p-smoother/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/supereagle/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/supereagle/vs_blit.bin create mode 100644 bgfx/shaders/gles/chains/warp/fs_dilation-horizontal-fast.bin rename bgfx/shaders/gles/chains/{super-4xbr-3d-4p/vs_blit.bin => warp/vs_dilation-horizontal-fast.bin} (57%) delete mode 100644 bgfx/shaders/gles/chains/xbr-hybrid/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv1-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-3d/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-3d/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-accuracy-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-accuracy-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-deposterize/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-deposterize/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-fast/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-fast/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv2-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv3-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv3-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv3-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv3-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv3/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-lv3/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-mlv4-dilation/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-mlv4-dilation/vs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-mlv4-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/gles/chains/xbr-mlv4-multipass/vs_blit.bin create mode 100644 bgfx/shaders/gles/chains/xbr/fs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/gles/chains/xbr/fs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/gles/chains/xbr/fs_xbr-lv3.bin create mode 100644 bgfx/shaders/gles/chains/xbr/vs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/gles/chains/xbr/vs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/gles/chains/xbr/vs_xbr-lv3.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin rename bgfx/shaders/gles/chains/{xbr-hybrid/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin} (65%) create mode 100644 bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin rename bgfx/shaders/gles/chains/{super-4xbr-3d-6p-smoother/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin} (51%) rename bgfx/shaders/gles/chains/{xbr-lv1-noblend/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin} (51%) create mode 100644 bgfx/shaders/glsl/chains/blurs/fs_smart-blur.bin create mode 100644 bgfx/shaders/glsl/chains/blurs/vs_smart-blur.bin rename bgfx/shaders/glsl/chains/{supereagle => eagle}/fs_eagle.bin (100%) rename bgfx/shaders/glsl/chains/{supereagle => eagle}/vs_eagle.bin (100%) rename bgfx/shaders/glsl/chains/{hq2x => hqx}/fs_hq2x.bin (100%) rename bgfx/shaders/glsl/chains/{hq3x => hqx}/fs_hq3x.bin (100%) rename bgfx/shaders/glsl/chains/{hq4x => hqx}/fs_hq4x.bin (100%) rename bgfx/shaders/glsl/chains/{hq2x => hqx}/vs_hq2x.bin (100%) rename bgfx/shaders/glsl/chains/{hq3x => hqx}/vs_hq3x.bin (100%) rename bgfx/shaders/glsl/chains/{hq4x => hqx}/vs_hq4x.bin (100%) delete mode 100644 bgfx/shaders/glsl/chains/super-4xbr-3d-4p/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/super-4xbr-3d-6p-smoother/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/supereagle/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/supereagle/vs_blit.bin create mode 100644 bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.bin rename bgfx/shaders/glsl/chains/{super-4xbr-3d-6p-smoother/vs_blit.bin => warp/vs_dilation-horizontal-fast.bin} (56%) delete mode 100644 bgfx/shaders/glsl/chains/xbr-hybrid/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv1-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-3d/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-3d/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-accuracy-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-accuracy-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-deposterize/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-deposterize/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-fast/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-fast/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv2-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv3-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv3-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv3-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv3-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv3/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-lv3/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-mlv4-dilation/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-mlv4-dilation/vs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-mlv4-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/glsl/chains/xbr-mlv4-multipass/vs_blit.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin rename bgfx/shaders/glsl/chains/{super-4xbr-3d-4p/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin} (65%) create mode 100644 bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin rename bgfx/shaders/glsl/chains/{xbr-lv1-noblend/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin} (50%) rename bgfx/shaders/glsl/chains/{xbr-hybrid/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin} (50%) create mode 100644 bgfx/shaders/metal/chains/blurs/fs_smart-blur.bin create mode 100644 bgfx/shaders/metal/chains/blurs/vs_smart-blur.bin rename bgfx/shaders/metal/chains/{supereagle => eagle}/fs_eagle.bin (100%) rename bgfx/shaders/metal/chains/{supereagle => eagle}/vs_eagle.bin (100%) rename bgfx/shaders/metal/chains/{hq2x => hqx}/fs_hq2x.bin (100%) rename bgfx/shaders/metal/chains/{hq3x => hqx}/fs_hq3x.bin (100%) rename bgfx/shaders/metal/chains/{hq4x => hqx}/fs_hq4x.bin (100%) rename bgfx/shaders/metal/chains/{hq2x => hqx}/vs_hq2x.bin (100%) rename bgfx/shaders/metal/chains/{hq3x => hqx}/vs_hq3x.bin (100%) rename bgfx/shaders/metal/chains/{hq4x => hqx}/vs_hq4x.bin (100%) delete mode 100644 bgfx/shaders/metal/chains/super-4xbr-3d-4p/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/super-4xbr-3d-6p-smoother/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/supereagle/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/supereagle/vs_blit.bin create mode 100644 bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.bin rename bgfx/shaders/metal/chains/{xbr-lv1-noblend/vs_blit.bin => warp/vs_dilation-horizontal-fast.bin} (76%) delete mode 100644 bgfx/shaders/metal/chains/xbr-hybrid/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv1-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-3d/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-3d/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-accuracy-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-accuracy-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-deposterize/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-deposterize/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-fast/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-fast/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv2-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv3-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv3-multipass/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv3-noblend/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv3-noblend/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv3/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-lv3/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-mlv4-dilation/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-mlv4-dilation/vs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-mlv4-multipass/fs_blit.bin delete mode 100644 bgfx/shaders/metal/chains/xbr-mlv4-multipass/vs_blit.bin create mode 100644 bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/metal/chains/xbr/fs_xbr-lv3.bin create mode 100644 bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.bin create mode 100644 bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin create mode 100644 bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin rename bgfx/shaders/metal/chains/{super-4xbr-3d-6p-smoother/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin} (83%) create mode 100644 bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin rename bgfx/shaders/metal/chains/{xbr-hybrid/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin} (71%) rename bgfx/shaders/metal/chains/{super-4xbr-3d-4p/vs_blit.bin => xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin} (71%) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/blurs/fs_smart-blur.sc rename src/osd/modules/render/bgfx/shaders/chains/{hq2x => blurs}/varying.def.sc (100%) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/blurs/vs_smart-blur.sc rename src/osd/modules/render/bgfx/shaders/chains/{supereagle => eagle}/fs_eagle.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{supereagle => eagle}/varying.def.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{supereagle => eagle}/vs_eagle.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{hq2x => hqx}/fs_hq2x.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{hq3x => hqx}/fs_hq3x.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{hq4x => hqx}/fs_hq4x.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{hq3x => hqx}/varying.def.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{hq2x => hqx}/vs_hq2x.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{hq3x => hqx}/vs_hq3x.sc (100%) rename src/osd/modules/render/bgfx/shaders/chains/{hq4x => hqx}/vs_hq4x.sc (100%) delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/warp/fs_dilation-horizontal-fast.sc rename src/osd/modules/render/bgfx/shaders/chains/{hq4x => warp}/varying.def.sc (68%) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/warp/vs_dilation-horizontal-fast.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/vs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/fs_blit.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/varying.def.sc delete mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/vs_blit.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv2-noblend.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-noblend.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3-noblend.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.sc rename src/osd/modules/render/bgfx/shaders/chains/{xbr-lv1-noblend => xbr/xbr-hybrid}/varying.def.sc (71%) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.sc rename src/osd/modules/render/bgfx/shaders/chains/{super-4xbr-3d-4p => xbr/xbr-lv2-multipass}/varying.def.sc (71%) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.sc rename src/osd/modules/render/bgfx/shaders/chains/{super-4xbr-3d-6p-smoother => xbr/xbr-lv3-multipass}/varying.def.sc (71%) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc rename src/osd/modules/render/bgfx/shaders/chains/{xbr-hybrid => xbr/xbr-mlv4-multipass}/varying.def.sc (71%) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.sc create mode 100644 src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.sc diff --git a/bgfx/chains/default.json b/bgfx/chains/default.json index b25388c3735..d7e31536780 100644 --- a/bgfx/chains/default.json +++ b/bgfx/chains/default.json @@ -1,4 +1,4 @@ -{ "name": "Default Bilinear Filter", +{ "name": "Default Nearest-Neighbor Filter", "author": "Ryan Holtz", "targets": [ { "name": "temp", @@ -8,10 +8,17 @@ ], "passes": [ { "effect": "misc/blit", - "name": "Final Upscale", + "name": "Copy To Filtered Texture", "input": [ { "sampler": "s_tex", "texture": "screen" } ], + "output": "temp" + }, + { "effect": "misc/blit", + "name": "Final Upscale", + "input": [ + { "sampler": "s_tex", "target": "temp" } + ], "output": "output" } ] diff --git a/bgfx/chains/supereagle.json b/bgfx/chains/eagle/super-eagle.json similarity index 96% rename from bgfx/chains/supereagle.json rename to bgfx/chains/eagle/super-eagle.json index cf3294e8a36..017c03b7179 100644 --- a/bgfx/chains/supereagle.json +++ b/bgfx/chains/eagle/super-eagle.json @@ -25,7 +25,7 @@ ], "passes": [ { - "effect": "supereagle/supereagle", + "effect": "eagle/supereagle", "name": "Super Eagle pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/hq2x.json b/bgfx/chains/hqx/hq2x.json similarity index 98% rename from bgfx/chains/hq2x.json rename to bgfx/chains/hqx/hq2x.json index 19eb14d6113..b525942d24c 100644 --- a/bgfx/chains/hq2x.json +++ b/bgfx/chains/hqx/hq2x.json @@ -41,7 +41,7 @@ ], "passes": [ { - "effect": "hq2x/hq2x", + "effect": "hqx/hq2x", "name": "HQ2x pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/hq3x.json b/bgfx/chains/hqx/hq3x.json similarity index 98% rename from bgfx/chains/hq3x.json rename to bgfx/chains/hqx/hq3x.json index 6e1f031d705..5d735f40f02 100644 --- a/bgfx/chains/hq3x.json +++ b/bgfx/chains/hqx/hq3x.json @@ -41,7 +41,7 @@ ], "passes": [ { - "effect": "hq3x/hq3x", + "effect": "hqx/hq3x", "name": "HQ3x pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/hq4x.json b/bgfx/chains/hqx/hq4x.json similarity index 98% rename from bgfx/chains/hq4x.json rename to bgfx/chains/hqx/hq4x.json index 78548abfca7..499fa23ac6a 100644 --- a/bgfx/chains/hq4x.json +++ b/bgfx/chains/hqx/hq4x.json @@ -41,7 +41,7 @@ ], "passes": [ { - "effect": "hq4x/hq4x", + "effect": "hqx/hq4x", "name": "HQ4x pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/unfiltered.json b/bgfx/chains/unfiltered.json index e8983f6dd5c..6a65031f349 100644 --- a/bgfx/chains/unfiltered.json +++ b/bgfx/chains/unfiltered.json @@ -1,24 +1,11 @@ { "name": "Default Nearest-Neighbor Filter", "author": "Ryan Holtz", - "targets": [ - { "name": "temp", - "mode": "guest", - "bilinear": false - } - ], "passes": [ { "effect": "misc/blit", - "name": "Copy To Unstretched Texture", + "name": "Unfiltered Upscale", "input": [ { "sampler": "s_tex", "texture": "screen" } ], - "output": "temp" - }, - { "effect": "misc/blit", - "name": "Final Upscale", - "input": [ - { "sampler": "s_tex", "target": "temp" } - ], "output": "output" } ] diff --git a/bgfx/chains/super-2xbr-3d-2p.json b/bgfx/chains/xbr/super-2xbr-3d-2p.json similarity index 100% rename from bgfx/chains/super-2xbr-3d-2p.json rename to bgfx/chains/xbr/super-2xbr-3d-2p.json diff --git a/bgfx/chains/super-2xbr-3d-3p-smoother.json b/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json similarity index 100% rename from bgfx/chains/super-2xbr-3d-3p-smoother.json rename to bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json diff --git a/bgfx/chains/super-4xbr-3d-4p.json b/bgfx/chains/xbr/super-4xbr-3d-4p.json similarity index 100% rename from bgfx/chains/super-4xbr-3d-4p.json rename to bgfx/chains/xbr/super-4xbr-3d-4p.json diff --git a/bgfx/chains/super-4xbr-3d-6p-smoother.json b/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json similarity index 100% rename from bgfx/chains/super-4xbr-3d-6p-smoother.json rename to bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json diff --git a/bgfx/chains/super-xbr-2p.json b/bgfx/chains/xbr/super-xbr-2p.json similarity index 100% rename from bgfx/chains/super-xbr-2p.json rename to bgfx/chains/xbr/super-xbr-2p.json diff --git a/bgfx/chains/super-xbr-3p-smoother.json b/bgfx/chains/xbr/super-xbr-3p-smoother.json similarity index 100% rename from bgfx/chains/super-xbr-3p-smoother.json rename to bgfx/chains/xbr/super-xbr-3p-smoother.json diff --git a/bgfx/chains/super-xbr-6p.json b/bgfx/chains/xbr/super-xbr-6p.json similarity index 100% rename from bgfx/chains/super-xbr-6p.json rename to bgfx/chains/xbr/super-xbr-6p.json diff --git a/bgfx/chains/super-xbr-deposterize.json b/bgfx/chains/xbr/super-xbr-deposterize.json similarity index 100% rename from bgfx/chains/super-xbr-deposterize.json rename to bgfx/chains/xbr/super-xbr-deposterize.json diff --git a/bgfx/chains/super-xbr-fast-3p.json b/bgfx/chains/xbr/super-xbr-fast-3p.json similarity index 100% rename from bgfx/chains/super-xbr-fast-3p.json rename to bgfx/chains/xbr/super-xbr-fast-3p.json diff --git a/bgfx/chains/super-xbr-fast-6p.json b/bgfx/chains/xbr/super-xbr-fast-6p.json similarity index 100% rename from bgfx/chains/super-xbr-fast-6p.json rename to bgfx/chains/xbr/super-xbr-fast-6p.json diff --git a/bgfx/chains/xbr/xbr-hybrid.json b/bgfx/chains/xbr/xbr-hybrid.json new file mode 100644 index 00000000000..4529f829423 --- /dev/null +++ b/bgfx/chains/xbr/xbr-hybrid.json @@ -0,0 +1,48 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +{ + "name": "2xBR v3.7c+ReverseAA (squared)", + "author": "Hyllian", + "targets": [ + { + "name": "pass0", + "mode": "guest", + "scale": 2, + "bilinear": true, + "doublebuffer": true + }, + { + "name": "pass1", + "mode": "guest", + "scale": 4, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-hybrid/2xbr-hybrid-v4b", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "pass0" + }, + { + "effect": "xbr/xbr-hybrid/2xbr-hybrid-v4b", + "name": "Pass 1", + "input": [ + { "sampler": "decal", "target": "pass0" } + ], + "output": "pass1" + }, + { + "effect": "misc/blit", + "name": "Upscale", + "input": [ + { "sampler": "s_tex", "target": "pass1" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv1-noblend.json b/bgfx/chains/xbr/xbr-lv1-noblend.json new file mode 100644 index 00000000000..f5353a0b6b6 --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv1-noblend.json @@ -0,0 +1,42 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv1-noblend Shader + + Copyright (C) 2011-2014 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "name": "xBR-lv1 No Blend", + "author": "Hyllian", + "passes": [ + { + "effect": "xbr/xbr-lv1-noblend", + "name": "Main Pass", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2-3d.json b/bgfx/chains/xbr/xbr-lv2-3d.json new file mode 100644 index 00000000000..7403b3e5b1a --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2-3d.json @@ -0,0 +1,42 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-3d Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "name": "xBR-lv2-3d", + "author": "Hyllian", + "passes": [ + { + "effect": "xbr/xbr-lv2-3d", + "name": "Main Pass", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json b/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json new file mode 100644 index 00000000000..772703ec9eb --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json @@ -0,0 +1,59 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 Accuracy + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +{ + "name": "xBR-lv2 Accuracy", + "author": "Hyllian", + "targets": [ + { + "name": "internal", + "mode": "guest", + "bilinear": false, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "internal" + }, + { + "effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1", + "name": "Pass 1", + "input": [ + { "sampler": "decal", "target": "internal" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json b/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json new file mode 100644 index 00000000000..d37d687f7a0 --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json @@ -0,0 +1,47 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +{ + "name": "xBR-lv2 Accuracy w/ Smart Blur", + "author": "Hyllian", + "targets": [ + { + "name": "internal", + "mode": "guest", + "bilinear": false, + "doublebuffer": true + }, + { + "name": "native", + "mode": "native", + "bilinear": true, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "internal" + }, + { + "effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1", + "name": "Pass 1", + "input": [ + { "sampler": "decal", "target": "internal" } + ], + "output": "native" + }, + { + "effect": "blurs/smart-blur", + "name": "Blur Pass", + "input": [ + { "sampler": "s_p", "target": "native" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2-deposterize.json b/bgfx/chains/xbr/xbr-lv2-deposterize.json new file mode 100644 index 00000000000..38b6fabd501 --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2-deposterize.json @@ -0,0 +1,41 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +{ + "name": "xBR-lv2 w/ Deposterize", + "author": "Hyllian", + "targets": [ + { + "name": "deposterize", + "mode": "guest", + "bilinear": false, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "misc/deposterize-pass0", + "name": "Deposterize, Pass 0", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "deposterize" + }, + { + "effect": "misc/deposterize-pass1", + "name": "Deposterize, Pass 1", + "input": [ + { "sampler": "decal", "target": "deposterize" } + ], + "output": "deposterize" + }, + { + "effect": "xbr/xbr-lv2", + "name": "xBR LV2 pass", + "input": [ + { "sampler": "decal", "target": "deposterize" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2-fast.json b/bgfx/chains/xbr/xbr-lv2-fast.json new file mode 100644 index 00000000000..b3b3a1e5141 --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2-fast.json @@ -0,0 +1,57 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-fast Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "name": "xBR-lv2 Fast", + "author": "Hyllian", + "targets": [ + { + "name": "internal", + "mode": "guest", + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-lv2-fast", + "name": "Main Pass", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "internal" + }, + { + "effect": "misc/blit", + "name": "Upscale", + "input": [ + { "sampler": "s_tex", "target": "internal" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2-multipass.json b/bgfx/chains/xbr/xbr-lv2-multipass.json new file mode 100644 index 00000000000..8876bbdde9b --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2-multipass.json @@ -0,0 +1,60 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 C (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +{ + "name": "xBR-lv2 Multipass", + "author": "Hyllian", + "targets": [ + { + "name": "internal", + "mode": "guest", + "bilinear": false, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-lv2-multipass/xbr-lv2-c-pass0", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "internal" + }, + { + "effect": "xbr/xbr-lv2-multipass/xbr-lv2-pass1", + "name": "Pass 1", + "input": [ + { "sampler": "decal", "target": "internal" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2-noblend.json b/bgfx/chains/xbr/xbr-lv2-noblend.json new file mode 100644 index 00000000000..6d8a70d9351 --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2-noblend.json @@ -0,0 +1,57 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-noblend Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "name": "xBR-lv2 No Blend", + "author": "Hyllian", + "targets": [ + { + "name": "internal", + "mode": "guest", + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-lv2-noblend", + "name": "Main Pass", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "internal" + }, + { + "effect": "misc/blit", + "name": "Upscale", + "input": [ + { "sampler": "s_tex", "target": "internal" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv2.json b/bgfx/chains/xbr/xbr-lv2.json new file mode 100644 index 00000000000..0b821dd82a3 --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv2.json @@ -0,0 +1,57 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2 Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "name": "xBR-lv2", + "author": "Hyllian", + "targets": [ + { + "name": "internal", + "mode": "guest", + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-lv2", + "name": "Main Pass", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "internal" + }, + { + "effect": "misc/blit", + "name": "Upscale", + "input": [ + { "sampler": "s_tex", "target": "internal" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv3-multipass.json b/bgfx/chains/xbr/xbr-lv3-multipass.json new file mode 100644 index 00000000000..801ffff34da --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv3-multipass.json @@ -0,0 +1,60 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR level 3 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +{ + "name": "xBR-lv3 Multipass", + "author": "Hyllian", + "targets": [ + { + "name": "internal", + "mode": "guest", + "bilinear": false, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-lv3-multipass/xbr-lv3-pass0", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "internal" + }, + { + "effect": "xbr/xbr-lv3-multipass/xbr-lv3-pass1", + "name": "Pass 1", + "input": [ + { "sampler": "decal", "target": "internal" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv3-noblend.json b/bgfx/chains/xbr/xbr-lv3-noblend.json new file mode 100644 index 00000000000..eedfab7217d --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv3-noblend.json @@ -0,0 +1,42 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3-noblend - Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "name": "xBR-lv3 No Blend", + "author": "Hyllian", + "passes": [ + { + "effect": "xbr/xbr-lv3-noblend", + "name": "Main Pass", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-lv3.json b/bgfx/chains/xbr/xbr-lv3.json new file mode 100644 index 00000000000..6d6046e9712 --- /dev/null +++ b/bgfx/chains/xbr/xbr-lv3.json @@ -0,0 +1,42 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "name": "xBR-lv3", + "author": "Hyllian", + "passes": [ + { + "effect": "xbr/xbr-lv3", + "name": "Main Pass", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-mlv4-dilation.json b/bgfx/chains/xbr/xbr-mlv4-dilation.json new file mode 100644 index 00000000000..a3dfd50e912 --- /dev/null +++ b/bgfx/chains/xbr/xbr-mlv4-dilation.json @@ -0,0 +1,98 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR MultiLevel4 Shader + Dilation + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +{ + "name": "xBR-mlv4 Multipass + Dilation", + "author": "Hyllian", + "targets": [ + { + "name": "pass12", + "mode": "guest", + "bilinear": false, + "doublebuffer": true + }, + { + "name": "pass3", + "mode": "guest", + "bilinear": false, + "scale": 2, + "doublebuffer": true + }, + { + "name": "pass4", + "mode": "guest", + "bilinear": false, + "scale": 3, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass1", + "name": "Pass 1", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "pass12" + }, + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass2", + "name": "Pass 2", + "input": [ + { "sampler": "decal", "target": "pass12" } + ], + "output": "pass12" + }, + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass3", + "name": "Pass 3", + "input": [ + { "sampler": "decal", "target": "pass12" } + ], + "output": "pass3" + }, + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass4", + "name": "Pass 4", + "input": [ + { "sampler": "decal", "target": "pass3" } + ], + "output": "pass4" + }, + { + "effect": "warp/dilation-horizontal-fast", + "name": "Horizontal Dilation", + "input": [ + { "sampler": "decal", "target": "pass4" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/chains/xbr/xbr-mlv4-multipass.json b/bgfx/chains/xbr/xbr-mlv4-multipass.json new file mode 100644 index 00000000000..decb4db3ec2 --- /dev/null +++ b/bgfx/chains/xbr/xbr-mlv4-multipass.json @@ -0,0 +1,83 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR MultiLevel4 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +{ + "name": "xBR-mlv4 Multipass", + "author": "Hyllian", + "targets": [ + { + "name": "pass12", + "mode": "guest", + "bilinear": false, + "doublebuffer": true + }, + { + "name": "pass3", + "mode": "guest", + "bilinear": false, + "scale": 2, + "doublebuffer": true + } + ], + "passes": [ + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass1", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "texture": "screen" } + ], + "output": "pass12" + }, + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass2", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "target": "pass12" } + ], + "output": "pass12" + }, + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass3", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "target": "pass12" } + ], + "output": "pass3" + }, + { + "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass4", + "name": "Pass 0", + "input": [ + { "sampler": "decal", "target": "pass3" } + ], + "output": "output" + } + ] +} \ No newline at end of file diff --git a/bgfx/effects/blurs/smart-blur.json b/bgfx/effects/blurs/smart-blur.json new file mode 100644 index 00000000000..01632204b73 --- /dev/null +++ b/bgfx/effects/blurs/smart-blur.json @@ -0,0 +1,55 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian Smart-Blur Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/blurs/vs_smart-blur", + "fragment": "chains/blurs/fs_smart-blur", + "uniforms": [ + { "name": "s_p", "type": "int", "values": [ 1.0 ] }, + { "name": "SB_THRESHOLD", "type": "vec4", "values": [ 0.2, 0.2, 0.2, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/supereagle/supereagle.json b/bgfx/effects/eagle/supereagle.json similarity index 90% rename from bgfx/effects/supereagle/supereagle.json rename to bgfx/effects/eagle/supereagle.json index 03f40691751..cd209b7cd80 100644 --- a/bgfx/effects/supereagle/supereagle.json +++ b/bgfx/effects/eagle/supereagle.json @@ -25,8 +25,8 @@ "rgb": true, "alpha": true }, - "vertex": "chains/supereagle/vs_eagle", - "fragment": "chains/supereagle/fs_eagle", + "vertex": "chains/eagle/vs_eagle", + "fragment": "chains/eagle/fs_eagle", "uniforms": [ { "name": "decal", "type": "int", "values": [ 1.0 ] }, { "name": "LUT", "type": "int", "values": [ 1.0 ] }, diff --git a/bgfx/effects/hq2x/hq2x.json b/bgfx/effects/hqx/hq2x.json similarity index 89% rename from bgfx/effects/hq2x/hq2x.json rename to bgfx/effects/hqx/hq2x.json index 9b67b562b02..267339da988 100644 --- a/bgfx/effects/hq2x/hq2x.json +++ b/bgfx/effects/hqx/hq2x.json @@ -19,8 +19,8 @@ "rgb": true, "alpha": true }, - "vertex": "chains/hq2x/vs_hq2x", - "fragment": "chains/hq2x/fs_hq2x", + "vertex": "chains/hqx/vs_hq2x", + "fragment": "chains/hqx/fs_hq2x", "uniforms": [ { "name": "decal", "type": "int", "values": [ 1.0 ] }, { "name": "LUT", "type": "int", "values": [ 1.0 ] }, diff --git a/bgfx/effects/hq3x/hq3x.json b/bgfx/effects/hqx/hq3x.json similarity index 89% rename from bgfx/effects/hq3x/hq3x.json rename to bgfx/effects/hqx/hq3x.json index 4cc61706dce..15fa50517a3 100644 --- a/bgfx/effects/hq3x/hq3x.json +++ b/bgfx/effects/hqx/hq3x.json @@ -19,8 +19,8 @@ "rgb": true, "alpha": true }, - "vertex": "chains/hq3x/vs_hq3x", - "fragment": "chains/hq3x/fs_hq3x", + "vertex": "chains/hqx/vs_hq3x", + "fragment": "chains/hqx/fs_hq3x", "uniforms": [ { "name": "decal", "type": "int", "values": [ 1.0 ] }, { "name": "LUT", "type": "int", "values": [ 1.0 ] }, diff --git a/bgfx/effects/hq4x/hq4x.json b/bgfx/effects/hqx/hq4x.json similarity index 89% rename from bgfx/effects/hq4x/hq4x.json rename to bgfx/effects/hqx/hq4x.json index 8d2221896ce..a2e61b3ae09 100644 --- a/bgfx/effects/hq4x/hq4x.json +++ b/bgfx/effects/hqx/hq4x.json @@ -19,8 +19,8 @@ "rgb": true, "alpha": true }, - "vertex": "chains/hq4x/vs_hq4x", - "fragment": "chains/hq4x/fs_hq4x", + "vertex": "chains/hqx/vs_hq4x", + "fragment": "chains/hqx/fs_hq4x", "uniforms": [ { "name": "decal", "type": "int", "values": [ 1.0 ] }, { "name": "LUT", "type": "int", "values": [ 1.0 ] }, diff --git a/bgfx/effects/supereagle/blit.json b/bgfx/effects/supereagle/blit.json deleted file mode 100644 index 24c3acf5a5d..00000000000 --- a/bgfx/effects/supereagle/blit.json +++ /dev/null @@ -1,121 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -//============================================================ -// -// blit.json: A simple texture-to-target copy. -// -//============================================================ -{ - // blend (required): The blend state for this effect. - "blend": { - // equation (optional): What equation to perform on the source and destination blend values. - // values: "add", "sub", "revSub", "min", "max" - // default: "add" - // - // "subtract" and "revSubtract" are provided as aliases for "sub" and "revSub" - "equation": "add", - - // blend function parameters (optional): What factors to use in the blend function when calculating the final pixel. - // values: "0", "1", "srccolor", "1-srccolor", "dstcolor", "1-dstcolor", "srcalpha", "1-srcalpha", "dstalpha", "1-dstalpha" - // defaults (srcColor, srcAlpha): "1" - // defaults (dstColor, dstAlpha): "0" - // - // "zero", "one", "invsrccolor", "invdstcolor", "invsrcalpha", and "invdstalpha" are provided as aliases for "0", "1", "1-srccolor", "1-dstcolor", "1-srcalpha", and "1-dstalpha" - "srcColor": "srcalpha", - "dstColor": "1-srcalpha", - "srcAlpha": "srcalpha", - "dstAlpha": "1-srcalpha" - }, - - // depth (required): The depth state for this effect. - "depth": { - // function (optional): The depth function to use when drawing. - // values: "never", "less", "equal", "lequal", "greater", "notequal", "gequal", "always" - // default: "always" - "function": "always", - - // writeenable (optional): Whether to store Z-buffer data. - // values: true, false - // default: false - "writeenable": false - }, - - // cull (required): The cull mode for this effect. - "cull": { - // mode (optional): What winding, if any, to cull. - // values: "none", "cw", "ccw" - // default: "ccw" - // - // "clockwise" and "counterclockwise" are provided as aliases for "cw" and "ccw" - "mode": "none" - }, - - // write (required): Write enable for color and alpha channels. - "write": { - // rgb (optional): Whether to store color data when drawing. - // values: true, false - // default: false - "rgb": true, - - // alpha (optional): Whether to store alpha data when drawing. - // values: true, false - // default: false - "alpha": true - }, - - // vertex (required): The vertex shader to use when drawing. - // value: A string containing the path and name of a shader file to use, minus the extension. - "vertex": "chains/supereagle/vs_blit", - - // pixel/fragment (required): The pixel or fragment shader to use when drawing. - // value: A string containing the path and name of a shader file to use, minus the extension. - "fragment": "chains/supereagle/fs_blit", - - // uniforms (required): The list of uniforms for this effect. Can be empty, but must exist. - "uniforms": [ - { - // name (required): The name of the uniform, as used in either the vertex or pixel/fragment shader. - // value: A string containing the name of the uniform as described above. - // - // NOTE: Some names correspond to special values that will be automatically filled by the BGFX - // code if they are used by the shader. These names are: - // "u_screen_dims" - // The dimensions of the first texture input if present, otherwise the dimensions of the output window. - // Valid values: xy - // "u_inv_screen_dims" - // The reciprocal of u_screen_dims. - // Valid values: xy - // "u_source_dims" - // The size, in pixels, of the screen texture incoming to the chain. - // Valid values: xy - // "u_rotation_type" - // This screen's rotation type. 0 if ROT0, 1 if ROT90, 2 if ROT180, 3 of ROT270. - // Valid values: x - // "u_swap_xy" - // Whether this screen is swapped on the X and Y axes. 1 if true, 0 if false. - // Valid values: x - // "u_quad_dims" - // The dimensions, in pixels, occupied by this one screen primitive itself in the output window. - // Valid values: xy - // "u_tex_sizeN" - // The dimensions, in pixels, of the texture in input pair N. Starts at 0. - // valid values: xy - "name": "s_tex", - - // type (required): The type of the uniform. - // values: "int", "vec4", "mat3", "mat4" - // - // Note: "int" should only be used for samplers. - "type": "int", - - // values (required): The array of numbers with which to initialize the uniform. - // value: A JSON array containin the correct amount of numbers to initialize a uniform of the - // above-specified type. The following size rules should be followed: - // "int": 1 float - // "vec4": 4 floats - // "mat3": 9 floats - // "mat4": 16 floats - "values": [ 1.0 ] - } - ] -} \ No newline at end of file diff --git a/bgfx/effects/warp/dilation-horizontal-fast.json b/bgfx/effects/warp/dilation-horizontal-fast.json new file mode 100644 index 00000000000..083b07edecd --- /dev/null +++ b/bgfx/effects/warp/dilation-horizontal-fast.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's dilation-horizontal-fast Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/warp/vs_dilation-horizontal-fast", + "fragment": "chains/warp/fs_dilation-horizontal-fast", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json new file mode 100644 index 00000000000..8015f3a3ca2 --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.7c+ReverseAA (squared) Shader + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json new file mode 100644 index 00000000000..3a30413f703 --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta1 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json new file mode 100644 index 00000000000..3045dbd65b2 --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - Dithering preserved + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json new file mode 100644 index 00000000000..2a285ea176c --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta3 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json new file mode 100644 index 00000000000..961fee7922a --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - v4 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json new file mode 100644 index 00000000000..e5c5e18c18f --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8b+ReverseAA (semi-rounded) Shader - v4 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json new file mode 100644 index 00000000000..38abe1e0d0b --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta3 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json new file mode 100644 index 00000000000..b23528caafd --- /dev/null +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json @@ -0,0 +1,35 @@ +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.7c+ReverseAA (squared) Shader + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-hybrid/vs_2xbr-hybrid", + "fragment": "chains/xbr/xbr-hybrid/fs_2xbr-hybrid", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv1-noblend.json b/bgfx/effects/xbr/xbr-lv1-noblend.json new file mode 100644 index 00000000000..8bca60452e6 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv1-noblend.json @@ -0,0 +1,56 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv1-noblend Shader + + Copyright (C) 2011-2014 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/vs_xbr-lv1-noblend", + "fragment": "chains/xbr/fs_xbr-lv1-noblend", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_Y_WEIGHT", "type": "vec4", "values": [ 48.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 15.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-3d.json b/bgfx/effects/xbr/xbr-lv2-3d.json new file mode 100644 index 00000000000..e4b6146ed2a --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-3d.json @@ -0,0 +1,60 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-3d Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/vs_xbr-lv2-3d", + "fragment": "chains/xbr/fs_xbr-lv2-3d", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_SCALE", "type": "vec4", "values": [ 3.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_Y_WEIGHT", "type": "vec4", "values": [ 48.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 15.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV1_COEFFICIENT", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV2_COEFFICIENT", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_RES", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-fast.json b/bgfx/effects/xbr/xbr-lv2-fast.json new file mode 100644 index 00000000000..e3ce6fb1f4c --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-fast.json @@ -0,0 +1,58 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-lq Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/vs_xbr-lv2-fast", + "fragment": "chains/xbr/fs_xbr-lv2-fast", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_SCALE", "type": "vec4", "values": [ 4.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_Y_WEIGHT", "type": "vec4", "values": [ 48.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 25.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV2_COEFFICIENT", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-a-pass0.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-a-pass0.json new file mode 100644 index 00000000000..f77141d0128 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-a-pass0.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 A (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0.json new file mode 100644 index 00000000000..809ec9cc5d6 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0.json @@ -0,0 +1,56 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 Accuracy - pass0 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 4.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV2_COEFFICIENT", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1.json new file mode 100644 index 00000000000..06dc01021a5 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1.json @@ -0,0 +1,57 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 Accuracy - pass0 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "ORIG_texture", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_SCALE", "type": "vec4", "values": [ 4.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-b-pass0.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-b-pass0.json new file mode 100644 index 00000000000..8ba8832f545 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-b-pass0.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 A (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-c-pass0.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-c-pass0.json new file mode 100644 index 00000000000..16872129ef3 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-c-pass0.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 A (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-d-pass0.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-d-pass0.json new file mode 100644 index 00000000000..758a21b2619 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-d-pass0.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 A (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-noblend-pass1.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-noblend-pass1.json new file mode 100644 index 00000000000..f57bd18eda5 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-noblend-pass1.json @@ -0,0 +1,56 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 - noblend - pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "ORIG_texture", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json new file mode 100644 index 00000000000..d5613e293cd --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json @@ -0,0 +1,57 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 - pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1", + "fragment": "chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "ORIG_texture", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_target_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2-noblend.json b/bgfx/effects/xbr/xbr-lv2-noblend.json new file mode 100644 index 00000000000..41695ff888f --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2-noblend.json @@ -0,0 +1,56 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-noblend Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/vs_xbr-lv2-noblend", + "fragment": "chains/xbr/fs_xbr-lv2-noblend", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV2_COEFFICIENT", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv2.json b/bgfx/effects/xbr/xbr-lv2.json new file mode 100644 index 00000000000..58e451ddeca --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv2.json @@ -0,0 +1,58 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/vs_xbr-lv2", + "fragment": "chains/xbr/fs_xbr-lv2", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_SCALE", "type": "vec4", "values": [ 4.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_Y_WEIGHT", "type": "vec4", "values": [ 48.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 25.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV2_COEFFICIENT", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json new file mode 100644 index 00000000000..39daf68c665 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR level 3 pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0", + "fragment": "chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json new file mode 100644 index 00000000000..04afb26b417 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json @@ -0,0 +1,57 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR level 3 pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1", + "fragment": "chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "ORIG_texture", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_target_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv3-noblend.json b/bgfx/effects/xbr/xbr-lv3-noblend.json new file mode 100644 index 00000000000..8a2965646c9 --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv3-noblend.json @@ -0,0 +1,58 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3-noblend - Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/vs_xbr-lv3-noblend", + "fragment": "chains/xbr/fs_xbr-lv3-noblend", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 10.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_EQ_THRESHOLD2", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV2_COEFFICIENT", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-lv3.json b/bgfx/effects/xbr/xbr-lv3.json new file mode 100644 index 00000000000..bcbf6e1f48b --- /dev/null +++ b/bgfx/effects/xbr/xbr-lv3.json @@ -0,0 +1,62 @@ +// license:MIT +// copyright-holders:Hyllian + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/vs_xbr-lv3", + "fragment": "chains/xbr/fs_xbr-lv3", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "XBR_Y_WEIGHT", "type": "vec4", "values": [ 48.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_EQ_THRESHOLD", "type": "vec4", "values": [ 10.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_EQ_THRESHOLD2", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "XBR_LV2_COEFFICIENT", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json new file mode 100644 index 00000000000..fd313a73eca --- /dev/null +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR MultiLevel4 Shader - Pass1 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1", + "fragment": "chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json new file mode 100644 index 00000000000..8d25c90ed0f --- /dev/null +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json @@ -0,0 +1,54 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR MultiLevel4 Shader - Pass2 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2", + "fragment": "chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json new file mode 100644 index 00000000000..7e862e66664 --- /dev/null +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json @@ -0,0 +1,55 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR MultiLevel4 Shader - Pass3 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3", + "fragment": "chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "ORIG_texture", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json new file mode 100644 index 00000000000..7323c3b8960 --- /dev/null +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json @@ -0,0 +1,56 @@ +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR MultiLevel4 Shader - Pass4 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +{ + "blend": { + "equation": "add", + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" + }, + "depth": { + "function": "always", + "writeenable": false + }, + "cull": { + "mode": "none" + }, + "write": { + "rgb": true, + "alpha": true + }, + "vertex": "chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4", + "fragment": "chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4", + "uniforms": [ + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "ORIG_texture", "type": "int", "values": [ 1.0 ] }, + { "name": "u_target_size", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/shaders/dx11/chains/blurs/fs_smart-blur.bin b/bgfx/shaders/dx11/chains/blurs/fs_smart-blur.bin new file mode 100644 index 0000000000000000000000000000000000000000..a7bb984a12a287b144fcdb520f245058f8b635ee GIT binary patch literal 2281 zcmb`Izl&2r5XUFUojFBF5Cl0aUMX^gHvR%NclmJ%9QQOYCsB}yAXv$vy~H$jSD)C4 zm9f0iTK@xk5e^#*1O6zT&%7PTJ(G}t3!B+D-`U;I%B+aEyYp-ABonW- zq#1A3PKiiP3eS4G7jld~tkk+2)h~a3+;~oibz52n)Ywn&#JSP zY;GUu_?UK;WnVjucw%WK?Qdg=~KGSJ+^;Pw&(5{#oJBCJ3Ar|%TgGX^+#17!|!95AL;y2l+Jmq zslrtkIX;rqceq-%oEy*6XWz?X$mR3t$uTOeJk@omUn5`cudAi$*lKW5_Zin;sAjQ) zh%jrqesK_3R>N8+f*se+2j8_2>wK&S-?G|l4(c*K>f=n#$vo!^dLKR;PvBD)fe#%% ztn;D4hYvoUUDKiY+@d)<@zj47JLj2YXP&bM-PmnBh*V9RGq5M@=&)nQHQ4bj!cIJO zhh; zTZEnXkKvu4R(JiJ{KL*XZAIQk&Vbz9PSVKLV?5{Jvz%>@895XCKhKMtjW_e1(rxS= zCx=PrrS6G2!s3?g5SQ) z%+qG|V35r#tA+16p|m6O?A-}2YMOs=91>EFCzTbAW7!sV|` literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/hq2x/vs_hq2x.bin b/bgfx/shaders/dx11/chains/blurs/vs_smart-blur.bin similarity index 100% rename from bgfx/shaders/dx11/chains/hq2x/vs_hq2x.bin rename to bgfx/shaders/dx11/chains/blurs/vs_smart-blur.bin diff --git a/bgfx/shaders/dx11/chains/supereagle/fs_eagle.bin b/bgfx/shaders/dx11/chains/eagle/fs_eagle.bin similarity index 100% rename from bgfx/shaders/dx11/chains/supereagle/fs_eagle.bin rename to bgfx/shaders/dx11/chains/eagle/fs_eagle.bin diff --git a/bgfx/shaders/dx11/chains/supereagle/vs_eagle.bin b/bgfx/shaders/dx11/chains/eagle/vs_eagle.bin similarity index 100% rename from bgfx/shaders/dx11/chains/supereagle/vs_eagle.bin rename to bgfx/shaders/dx11/chains/eagle/vs_eagle.bin diff --git a/bgfx/shaders/dx11/chains/hq2x/fs_hq2x.bin b/bgfx/shaders/dx11/chains/hqx/fs_hq2x.bin similarity index 100% rename from bgfx/shaders/dx11/chains/hq2x/fs_hq2x.bin rename to bgfx/shaders/dx11/chains/hqx/fs_hq2x.bin diff --git a/bgfx/shaders/dx11/chains/hq3x/fs_hq3x.bin b/bgfx/shaders/dx11/chains/hqx/fs_hq3x.bin similarity index 100% rename from bgfx/shaders/dx11/chains/hq3x/fs_hq3x.bin rename to bgfx/shaders/dx11/chains/hqx/fs_hq3x.bin diff --git a/bgfx/shaders/dx11/chains/hq4x/fs_hq4x.bin b/bgfx/shaders/dx11/chains/hqx/fs_hq4x.bin similarity index 100% rename from bgfx/shaders/dx11/chains/hq4x/fs_hq4x.bin rename to bgfx/shaders/dx11/chains/hqx/fs_hq4x.bin diff --git a/bgfx/shaders/dx11/chains/hq3x/vs_hq3x.bin b/bgfx/shaders/dx11/chains/hqx/vs_hq2x.bin similarity index 100% rename from bgfx/shaders/dx11/chains/hq3x/vs_hq3x.bin rename to bgfx/shaders/dx11/chains/hqx/vs_hq2x.bin diff --git a/bgfx/shaders/dx11/chains/hq4x/vs_hq4x.bin b/bgfx/shaders/dx11/chains/hqx/vs_hq3x.bin similarity index 100% rename from bgfx/shaders/dx11/chains/hq4x/vs_hq4x.bin rename to bgfx/shaders/dx11/chains/hqx/vs_hq3x.bin diff --git a/bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin b/bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin new file mode 100644 index 0000000000000000000000000000000000000000..5b037b2bfe84c87e9bc961391dfb4f721226ebfa GIT binary patch literal 909 zcmZ8gJxc>Y5S`p5myn32&{7E&Hl~miVx_^vGXe2JE`(TJb@U0H)MF$ppmC*K67Z~I5p+Dr}3GBllR-fK(x8TK>CAU zt2RH;gi}62?i$LuX9Xa09<#9f`Fyk|E&)@MV(M7OnSR0KFc$I*_KHiu%u}A)6jQt6 z6foYK#oRfJvM;7)d(6~QU94LY$!c7A(Bj1U++lMTR7SNar}@+|i)*S@cfy<@r n)fhDzG{%{^&fgeo?Zo$ajkiNo^}dL9{-OY8~t4o literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/super-4xbr-3d-4p/fs_blit.bin b/bgfx/shaders/dx11/chains/super-4xbr-3d-4p/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/super-4xbr-3d-6p-smoother/fs_blit.bin b/bgfx/shaders/dx11/chains/super-4xbr-3d-6p-smoother/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/supereagle/fs_blit.bin b/bgfx/shaders/dx11/chains/supereagle/fs_blit.bin deleted file mode 100644 index 7b633fde6eda8a55c183d147e834ceda0f5709bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F$3e;Fo7)U@eX>Nv$woWME)qC}4DnaB^;~{*tSbI_*hx`^CFv{faU`DWD7k z12d4;0pbNfdf$Vo>VBq}301T#=s@L}d#Ffg#g^ttgt)yhH4w1aqq0RT7% BF3SJ_ diff --git a/bgfx/shaders/dx11/chains/supereagle/vs_blit.bin b/bgfx/shaders/dx11/chains/supereagle/vs_blit.bin deleted file mode 100644 index 8ca25c11eae42ef871a8e5410cda03bbbd959507..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmZWlu}Z^G6ur$$ZK>L1DRdCq4-kh8;viB?j15R%NJ^+6WGb~H2!i?t;v~4cIE(+| z>g<-q)pPQEAoan$IXU;dd+xhMK6bYry+K1dx8>b(exKf4U%DdVO5cfQN8$4G`Src~ z^)T4oT>m)uUNlhaJ0c3-9mEU52btt2lM7(-ZA6N&ha8XRi4+FbnLPWo0Lm2}7NWq1 z`c!9<>O7eydLq-~S*UduiH6@5HHg1{>_?6Vc5+@LlgQWg4Uzc@Pe1DOqWo`WhIq@z zQN{)%q!F}dSX2Bo1meExH>k?@>wmmQ1;F&Pm>vsAtD(`bhB;J#e~Ve84!d;7?c;fs z7=6(*I_t@LAkwjQ%Y&A+U+=hU?t*GtU&~oN_p&F_v~$F`%NfYodE#x;=a4H@O(Y*X F_yGziIhp_f diff --git a/bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.bin new file mode 100644 index 0000000000000000000000000000000000000000..b3315773ebb2de75196b53fec05d394e1b3490d6 GIT binary patch literal 588 zcmZuuyGjF55Iws|@PUvmM6}BXScD)}Vxq}zvM9N-yOE&aJ78fUVwFOISX04u9}f#>Yr+lT{aW;iovW-d2Mdu0>8#2zYFqs#M~x(9fu`<>x#`|H>novf_w zeZDrwe)#ds5-UK7ah-T0euy~j_MaHb#5{3L$keZ1S(UiYv%-m2UHrJ9axb1MP+}rp zJu>k^l`cIzJuqpU#ioz8**6KYaM(5`>0oMji*A!nx6}w{(#y1yGqRne8)leJ(_Sap zqM$|I5Jy^d7BB;bt9;gNkq-vIMSxNx2=W_UuDK&>X0@V^@AvhF2Cy_k!9~jylJi@1 zn7qp~Hsw`Qe+Vq7U$;k2_fY8FJ+4Q(??pTNPtOK0cjxrJoyRD1`h16dNA#b*W@lSn UWan%Gl}B6iTADa%ZrgAA1sXUyyZ`_I literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.bin new file mode 100644 index 0000000000000000000000000000000000000000..40d4899cda1dbc7630a9ac91c3e1f189fd65df7e GIT binary patch literal 705 zcmZ8fu};EJ6uq=X2pC{-HH;1phQSyIB?6TuhDRuAFfr-WAS@;dN|+cJaB()qKX7(8 z{)&Il(M01peY{4!$$dRN_uhBT>ucb*9o2gDEGbOG+fj7ay}lYdBH~DK8cw2Fcr%(u zdzRECBP**pIB9&{&puw?oaJ!*oqM|YJj|ebWr^5$?joO&J0Ly(v~vkeK9B4oO^{=h z%OZh>$x5F4NQ0{Z;2kdryjK#+%MGwo{(IJ z(Sr?{8xl|QiQcB>xd($hll^`WrY5wf)XIzBZuSNk;#cGO&SA@ar~-*(kvN+jS1QRn zaSfOn22*>8nYgNZSc^D=cY|xd>@z%l;mj862lxcB=-FUP&lr8yYa#_xH#}(BSo?5G zdKOgPcrcvlr`|q}V?4RrdWM|w=3+m3EQu7!amK1+k;U=vbQe{U$=zW-|Nf^pDW%I1 Muhh+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv1-noblend/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv1-noblend/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv2-3d/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv2-3d/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv2-accuracy-multipass/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv2-accuracy-multipass/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv2-deposterize/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv2-deposterize/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv2-fast/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv2-fast/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv2-multipass/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv2-multipass/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv2-noblend/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv2-noblend/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv3-multipass/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv3-multipass/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv3-noblend/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv3-noblend/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-lv3/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-lv3/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-mlv4-dilation/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-mlv4-dilation/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr-mlv4-multipass/fs_blit.bin b/bgfx/shaders/dx11/chains/xbr-mlv4-multipass/fs_blit.bin deleted file mode 100644 index 80d85fb110742d3ae2415a237aee617a3e0c7b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmZ<@_F!Rb{`8QMfwefkB(=hTk%57cp@7jP!pV7G#q*_-JO!_PHm;EuYk4^xC+ix2P*_6+g#_hWGO_wf&62yu;Y_V*8RVOZ@Cv=ih8kQpF56@VB9knIGT5#ku+ z?i#|ddUddeOVAXcA_pK=1>z`>^AZGrECz-M2?iF10th=a6zC=a2Ifx!0$}q&Y$G5W zS6oqdxsfHppAVNWqf-YTUAzeu^F*cx`kd#nS2nfX=go2h(lwD@`Wnd8-i3KMo5~;E6ub zr4+i#r@5ZU^k|l7U8bVpcgG&YUq7Bl#sxdMFv=!!*2ym|GMU`?t%+21voy2bOUt)v zoR&ObgfzmQGmI&F89;Gf<_)TiBJ+>;s2G}lPSfKGt?j_}ur@~@|DBGZ*@s#BWJ5f! z7298L+CJyWdMwg)b;p5a<<~n~w|jv?=j)j3=ll0XI_@6Xw%tSK?vvp>-s^xPR2`%U GGxz~&T{$TL diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..3b72deb878233145161e49c10516b4f4cbe44fef GIT binary patch literal 5120 zcmb7{J#QRU6o#+Ij^j89SsXwp2x;YlDn&3-2o!h{$D3G+vdDHU1BLmr1QG>G03n3X z#zh(==)ylpK^ht=iljjN1SDFDP|>77h>G_)bKluvGvk;m-8py8IrlxE_wMXqt_Rp>F)_(f-`=9?<{O!j-cO{Y}rD@UAnwQ1+QgdzN z($%L#=f#`T{9BWOKDvw(nlmu+fX^%Z`3Zg@-n10pTZBIIgf_rOhXHR!(|q0;&_kN$ zqr-qdt7$$u4ETpN%}0j;pP0-?hXMbHCj5=9o!5sOYnyAst7&C;Ww@R;SGQM&!}W{l z?ohcQSHuBMU(*8&200MM=K1wYtDEWW-Hpo^*H5clrTAaV@i!FW;G4eQD!Xq&-tNWw z_OlBA<7$2FT1xNs()3cV7x`iRP;2aXO&+`^cCU%oYhv^opS>pDUDG4 zU=V*B#@+!jeto(Z{n>_rAH+^Rx?-Vr#6qpwFz~||=(+IL~dtvaW-r|bGg z?%88G3+j+*olm{j`yb4VYhoAmQQju@i%X?enbcCpe;E(D*3I)oKIt*+jh3# zcqMz^=Ql~*g{&wcqvhtb zo^i2LlzL3)z0&Z5+;G3UmyKZ`yD-i*Fz~mjZ<+ltMaOx=E7yayF^ZD6|HdW8IBzpm zZXV>k?Pp8->KZyu+oWH#H_lzIYkk&cM}0}_QTG{jBv-zR!BE}mJ_GxvcyVT=3$ATs zUM+9hFh>H351x+|tQL&k6n(4y3%1LK$^)Q-I1FF7#= zGI-FU)MEm}wL^}5+vMG{W-P{v;+|k_4Am%l z#qyhyu~uJ2y;wVL@NKgw_0kb{QxAROcWjd~dSg=NxY4z3pTo!HTwB6N(gySPrBnJF$obA6E&r5;tT?u}`6_R+he-`mii zs;FvRV-%$n(tX{BiK+c*nVh2U+}IYhDD`->E`diKsQcKbgf_VMHSg&TJ4QU@cpzWK zdU0>b_K3Os%+ac*){pr2(RU9xt}$-dmo;#!xR5!nz|Ci`C?%MP%Xp8T<;YWgMvdol z_^5uwx2$;T?-hJ@&v_sDwGQ5(V`^WU{brddef`n_fAbt0dy7(!iDBC>%jfH=8Q5Eg z@_kk0|9ql+8(T+tNO$JPI`NH@b)jYaUrum#DhQ3W`58iE(U%OCwL4! z=lFgmFSW0GeMG?%nWGLlhPY>uS(p6_jr}2;*uRwJiY4|3R_1X}?`h3AmBx4Td}A&B l!`68<>rR#I7)5Vi?^pYsEBgjzoYj4{mvy}FwK$Gv(!Y0G&L;o> literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..3b4f0db46a32145c202ce5166d87daed0c99cb52 GIT binary patch literal 6332 zcmb7|y>A><6vdy%j^j9A8|On&5NMSeiNujYKnPFb?8cU&EZD|MpfFz%Af-SFNC-vI z#swv1YN|A8sfin?sVFE@rru=DoT1zVq%q_rA9?+h1Lpx_9Zd zPxhr_H?OR0^gi5JTUzO@E)A|PU0&`;G5z z|FCiIn;&nVn@e3uCT`88bL#hfdHajc?wp%o{@UrQH?J(d_u$#@U;Xyh;rp9!EdBjt z^^R21q%^7iODa8KIT|HH?e$4WpcH;TwX@&o7HU8+Mls@mI$@xwv_+k7)W7hE)9y}&?kBQe~ zV)PiFJtp4UTKh$}TJLM6;iP0eQSn06MSFgx6Fl}GRL}PFn8M%8HvJ=&&N1PiG2p2$ zpINI7gDR$h5w@9^CdMB*?lz3GuYf`PZ5UVfi1F9SPSoc(4C;8dScr>Q$W_6fE{saqQAzI{38QpDcE?xO00y~X&E_Nm9t zOUA0l3-~v9K59X-7G#~wCDfTkodB%6vB~OftQny-;8GHTndcC1GvM*KK@{Kxt zJ?j_?FJ$y!PUv;3R#TxXN-5HCp?=ve_{=f4*}YTq!)J+W*%0wve(fe^=9MLoR=A8DK4TkbNsyDD7N@iPdy+)Re^z}82k+~k74Xnq!z2?q#Ii5sc zl)5!|ah-roj){r2h{qU?fxakp8-sCF8rPV3*@1x$T>7Hat%2bj*Vh6Ad+X}4n2)B; zb&&avnqmxAuE*fQ`;_(U^Q*?)T-)n_sTQ@sTeNEgA%4`)9>&&l-cy^%R0mOyjOAC< z0b|#ShNJvso0wOWXm*|%#=;k4F>b@kHafxD^CWS^rSFW9-x`i;#=Ih{^UAa9i7{N$ zic+_Rzru*vS;PJ^Zu2+WB>JM%t%2nn)#GAq?4=vUvaa7KYJYv$)m>P+&gj#YGr7Ko z=EOP8_doG%ue()Bq-$$S{g%$aL(Dy{hxL6g*~upC%2NkB2`t+)-f6#$sW~OSV{^Xd zM^Q?Ue$jpSR4#1k8rhk1=6G%)%O+38!{4IRE$~W>z#BegE;{2ewyY@iut(mRXAT+f zQn#onI%2Kx&>1gc&ABN`DaPQz zVNvQf(uaTH3p(Qk*TQ?*J~&?x$FVm-A`b5>KQm9f#<^>md(Ow^e4p3m1zZ0n`8+Ko z|Mdd801=f3q1vtGY35fgHAVthC+ zO5Oe^4%^p%pDlCGJB(v=p50?(-L%HU?H-$^&hG`-m>Ugu%riI0FXZ#lHuOcQTO%&- zH#9}5TchC@?QPY>T~#~lPpc13i~PN?ZA z`Q*|#@l7ooY;D6Be`u@`9IEFV-!{wxhlY*unl|`j8~a?3i!pK8CjM&>Ufl+N+HC4R zJ9guEE!#ZH@!03-{9a05=ZA4y?D!)uXZSuP)<^rZ&zoI6RsSign<1aHk-n(*5V*{r z%k$wZd~D30&wBY8doOIVjJ>xBirSg9z29bQW7+Sw&AZulqGZM}&e^-&YQA~E51ReC QsP~i2Y~y+F$CfVBe{o<_cmMzZ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin new file mode 100644 index 0000000000000000000000000000000000000000..e2cebba1f6779b31133275b3d188515eb728b27e GIT binary patch literal 8481 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..f4fe0e66cca7526ad41f263ae8ec145a84748f90 GIT binary patch literal 1337 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 WzSbGoy$V|>?Akb`j~uCSJN*wO0znP{ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..c69cdcbb1aed35130d1e98020fb402e6bdf6a93e GIT binary patch literal 9249 zcmd6syN_N+8OCSF>r2*7yet6`qllF$L5gEgaFB?{w~Z~KY-Br@LkcI56^WF>a-47x zg3l=^Qz1+62c$870Zl9lY6?V$1QZdq3j_rc&+q-_IcL7v^R1VTk>+yV+q{=&=A8X@ z>)Pej_s@L!jn#DYgIjlZethfwcYnHbY9pnzl8*i4gAZ^0Xy@G@zH@iy?WfbJw3-gS zz4PAPw>Hvkv9 zs%|>ZH0FcqrXxdxen{PPWN6S2tDBAt4LUKIjtmX@6Y9{f-MIDY_O&b5uWY}PE^L2y z`)ay=>E?y)?W-5lgKg!8ToDI$Hr3s*K_dsUasAxYmoHsU4<1~*eDUh5CsQh-|4K@) zE5xmjH}y2P@jbSGb3LAKeo5iqp08hfEv4_Trvs_*@^YY0**>-B%JV?86ojJ&b(q}JRI%kIYw=_3P1JZt|! z|0%6G-+N)rddM1U-alxM!NKG7@qe$gI;AgHqQ>y<9~kbixM!fb#?|Mj8}wW>bTxK8 z93OKo8oGL%uJ;SRvZw23J?PF0Jn|a&UUG)5@42rFd0D2<`Ldq(pVD7;?{fz}P9Oi5 z>4U2&eT5x$u}|&UL*8}a`^jf-%=dWbw`Z@~iW-ix z4&Ls*JK~IV?=QVihB%PTMMH-#5r%Iq$BdNM^Dl_S_vJnDjeBJ6w`uH~i-yi`-x-#3 zoII;VOwfF0G{>1~YlA=b4cS~YbTRo}toEZeqwI8Ts_b4lkNXZe{PR7^vs&;>^E|~f z_KXxj}v)X`TYI;rtYJEsv!FL_O6Ii&XdGvSjJW4*k!;obk=3F#%7<63RhdMhU zhkV@enkyEEcboFPAS1Pb=Y6a%Uc^V%K0sd%U(@gSRvhUQ((S~ZPxXs#M{yK2_f#CsSw)P!}rht7KI z=imqNAnRN>4(41mbh)tH?z}I)Lwshj%{}UO7V($|O>qW~8J_LK!#Cz!G<1IWEW*dW z^alBsXB)0t&%?51yti|J@40ALvbXp2jGpbA=9zr;JS?*}GHT=R4j*p@VXQ$aK}fSt zHS4#9bj)W^zvTti;O`;d*53FHJ^a#pdH5Y87ZJL6o7@dJy`jGWvLtWJHc^OnLO+w@ z7kNX6SuuxgYWvUQb6PHX(0fjuSRSf>syiTJ;x5@*Y2^Y}iksMHXR(Vd%d_4~{)T$*F*v~QgKpVq>7@!do%gpIi0U7wcc z+EA|zoeT492mNn0wfweZsOegj)iP=sdb{p~hnyWcwPcQ32EHcmgkADcEBjRExD&A9 zT0zf6!^E8c&*$4Qb$6zGo5{Dhx8l1HxleQtguKo{7u~C)%N3^Rc*F=u~rNF_S-YOKF{!S(UAVC(S6J_ zzkzc;o0ubpENSKMJ7ZrS7rqLUyYlAv_sR)8>cVe&{Bn! zHa0EmwMdiy+iCIan3!|XFkl%>k9p?*E5`F~ooPHf9?$q{JXagz`$p#&+OnL$1FL@* zM#%#>WIm+7U9iv0v;MDqaHGns6cNT$)h_R>T0%tK!V(jH4a>O*{Kk!D5Y#U6GQ<{Auw>0O;c{h#Od2eaC$p7E{ o<0W@^&O2-D(fF3QvpMboEf)>lJxT6As&aEI&(6LS*Vrum7f`S@+5i9m literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin new file mode 100644 index 0000000000000000000000000000000000000000..464db7ce0ed12ade0c48831dd612424a744b7554 GIT binary patch literal 8969 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 K_hY+G(*FQ}Ll%z! literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..565ff37ece78f990decba7f476771f011a6d74ed GIT binary patch literal 9293 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 Q4t!AQ?9VIF9zRO|0qbBf;Q#;t literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin new file mode 100644 index 0000000000000000000000000000000000000000..58488796cd803f75827008e26b43267a18d8084c GIT binary patch literal 8853 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 t!g3MqU;pu~7!oOk%iaHN@Y-sgUwncdB+ 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin new file mode 100644 index 0000000000000000000000000000000000000000..f4fe0e66cca7526ad41f263ae8ec145a84748f90 GIT binary patch literal 1337 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 E|4K?VmjD0& literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..de6b1c2efc1e20604a1b342e3fc1b15a18d48735 GIT binary patch literal 11735 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..0ac5f18d87a0d63485265ae375da3c740e439ed2 GIT binary patch literal 4419 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 ND5K?fqFleH{{av}kof=r literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..dde6ea10a5c8fa02a9a2a31e6a5710b9e8d22499 GIT binary patch literal 3084 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 IFZo~LKS|s*1^@s6 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f4fe0e66cca7526ad41f263ae8ec145a84748f90 GIT binary patch literal 1337 zcmZuxO-mb56unL+lQfEEp$id8a9LbPz#=Z}XyVjBaY9CdqA;tVb|d&zaTQ&3*X5CxcJjv(t~h zi1;#jnO+R8)AN&?!LlczOo)`*dz-D5L;v~T-?^(_jfKbg$J?L4aUxQ}V+sBh{sUkq zdB1avn0OW5g{u*x&CH1OZD@Xpvt9*3TEIQLmw>n84{=YranjlC#5=OPwbzQ{URz@H zn?-UBJofwJ@>wtIhuA0JO#5LBsTFY3Z_46&L_S^l3kjka>&0!QIEW(U%4yJ0Esk8rAFO zopBQ}HET?rN5~m9EQeTw=oi*BBY5CCji zWbzCc=kY@P$nag>quT~S^SwY%?aAc_)v=s=Lo&JYfVjeWIGfHJ%w{tLcdo`8sSh{6 zVQ-kp;qHq$dd9nm0;?}qubitlR*U!bzgo&)b93lZ`|xgydDQ;h@js7gr`}gin|#q5CJllG7B-RRws&$>lEzd7X5CxcJjv(t~h zi1;#jnO+R8)AN&?!LlczOo)`*dz-D5L;v~T-?^(_jfKbg$J?L4aUxQ}V+sBh{sUkq zdB1avn0OW5g{u*x&CH1OZD@Xpvt9*3TEIQLmw>n84{=YranjlC#5=OPwbzQ{URz@H zn?-UBJofwJ@>wtIhuA0JO#5LBsTFY3Z_46&L_S^l3kjka>&0!QIEW(U%4yJ0Esk8rAFO zopBQ}HET?rN5~m9EQeTw=oi*BBY5CCji zWbzCc=kY@P$nag>quT~S^SwY%?aAc_)v=s=Lo&JYfVjeWIGfHJ%w{tLcdo`8sSh{6 zVQ-kp;qHq$dd9nm0;?}qubitlR*U!bzgo&)b93lZ`|xgydDQ;h@js7gr`}gin|#q5CJllG7B-RRws&$>lEzd731qd+U;$RpYS?r)DCRzb2B!&`-1gB0!aFE3BI5iHs7zbznf&Kv# z690sWi!KgMPW%GT>FXoJo8H&^&iy#&y|(8y;$M}IcSADg{>5l;**+N`#YH48*>nGF zaOIzlt_LfI*bzzkf!EwUwzI6p=$V#P4RZtbV6S5fG3zu=Z91k#d=rDU>$s+=s5!j_ z)vvWMZ;51dUgLlz8EJCzsuxgN>(Q95C-*9jru8{Xs)v}?>0lo9601gfVm1I+UL;5Sc>?c{{UD#Rtx|D literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f4fe0e66cca7526ad41f263ae8ec145a84748f90 GIT binary patch literal 1337 zcmZuxO-mb56unL+lQfEEp$id8a9LbPz#=Z}XyVjBaY9CdqA;tVb|d&zaTQ&3*X5CxcJjv(t~h zi1;#jnO+R8)AN&?!LlczOo)`*dz-D5L;v~T-?^(_jfKbg$J?L4aUxQ}V+sBh{sUkq zdB1avn0OW5g{u*x&CH1OZD@Xpvt9*3TEIQLmw>n84{=YranjlC#5=OPwbzQ{URz@H zn?-UBJofwJ@>wtIhuA0JO#5LBsTFY3Z_46&L_S^l3kjka>&0!QIEW(U%4yJ0Esk8rAFO zopBQ}HET?rN5~m9EQeTw=oi*BBY5CCji zWbzCc=kY@P$nag>quT~S^SwY%?aAc_)v=s=Lo&JYfVjeWIGfHJ%w{tLcdo`8sSh{6 zVQ-kp;qHq$dd9nm0;?}qubitlR*U!bzgo&)b93lZ`|xgydDQ;h@js7gr`}gin|#q5CJllG7B-RRws&$>lEzd7X5CxcJjv(t~h zi1;#jnO+R8)AN&?!LlczOo)`*dz-D5L;v~T-?^(_jfKbg$J?L4aUxQ}V+sBh{sUkq zdB1avn0OW5g{u*x&CH1OZD@Xpvt9*3TEIQLmw>n84{=YranjlC#5=OPwbzQ{URz@H zn?-UBJofwJ@>wtIhuA0JO#5LBsTFY3Z_46&L_S^l3kjka>&0!QIEW(U%4yJ0Esk8rAFO zopBQ}HET?rN5~m9EQeTw=oi*BBY5CCji zWbzCc=kY@P$nag>quT~S^SwY%?aAc_)v=s=Lo&JYfVjeWIGfHJ%w{tLcdo`8sSh{6 zVQ-kp;qHq$dd9nm0;?}qubitlR*U!bzgo&)b93lZ`|xgydDQ;h@js7gr`}gin|#q5CJllG7B-RRws&$>lEzd7X5CxcJjv(t~h zi1;#jnO+R8)AN&?!LlczOo)`*dz-D5L;v~T-?^(_jfKbg$J?L4aUxQ}V+sBh{sUkq zdB1avn0OW5g{u*x&CH1OZD@Xpvt9*3TEIQLmw>n84{=YranjlC#5=OPwbzQ{URz@H zn?-UBJofwJ@>wtIhuA0JO#5LBsTFY3Z_46&L_S^l3kjka>&0!QIEW(U%4yJ0Esk8rAFO zopBQ}HET?rN5~m9EQeTw=oi*BBY5CCji zWbzCc=kY@P$nag>quT~S^SwY%?aAc_)v=s=Lo&JYfVjeWIGfHJ%w{tLcdo`8sSh{6 zVQ-kp;qHq$dd9nm0;?}qubitlR*U!bzgo&)b93lZ`|xgydDQ;h@js7gr`}gin|#q5CJllG7B-RRws&$>lEzd731qd+U;$RpYS?r)DCRzb2B!&`-1gB0!aFE3BI5iHs7zbznf&Kv# z690sWi!KgMPW%GT>FXoJo8H&^&iy#&y|(8y;$M}IcSADg{>5l;**+N`#YH48*>nGF zaOIzlt_LfI*bzzkf!EwUwzI6p=$V#P4RZtbV6S5fG3zu=Z91k#d=rDU>$s+=s5!j_ z)vvWMZ;51dUgLlz8EJCzsuxgN>(Q95C-*9jru8{Xs)v}?>0lo9601gfVm1I+UL;5Sc>?c{{UD#Rtx|D literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..3002f050eca08a6a0637e60306b52f52be949d34 GIT binary patch literal 829 zcmZ8fJx{_=6uq>31qd+U;$RpYS?r)DCRzb2B!&`-1gB0!aFE3BI5iHs7zbznf&Kv# z690sWi!KgMPW%GT>FXoJo8H&^&iy#&y|(8y;$M}IcSADg{>5l;**+N`#YH48*>nGF zaOIzlt_LfI*bzzkf!EwUwzI6p=$V#P4RZtbV6S5fG3zu=Z91k#d=rDU>$s+=s5!j_ z)vvWMZ;51dUgLlz8EJCzsuxgN>(Q95C-*9jru8{Xs)v}?>0lo9601gfVm1I+UL;5Sc>?c{{UD#Rtx|D literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..7d83dba6a6950e93370f60bedc238fa9260b264f GIT binary patch literal 9331 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 Zss9(myi&XF(QNk3{Q0)Vw(H*R{tLRny@UV& literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..0dec7034df867011882e7a0266ad06ac127386fd GIT binary patch literal 5449 zcmdUy&ug4T7{_Nf$tKy1uIoc(uzMo z*FXz`h^J1G6*pJl}cd`#kf^ z%)9NyQ=`8f`1O~Xo4U4gwfp|c+NBS>2kXwclABul;O&+7x)-m$ySlc^)!eA7T)y;9 zcTMWEQfGrhb$1~jH0th3K6tk7dimhFy8AL8JYRR;=7Ym^_kBJ%Qg?Uq!O^r7`eUjSsy$T-c(9ad)z5t|`$3K# z`B$09{~|A|j;Mni3+Wv+<_fos{gTs5g{c zl-*Be^LJlQ{FtA;+5*$J15V;O})T=S$hT;IM};yT>wF zIURud!9H;{dpCF1daVGdjAnD65!XoXwbO~4s0Z5{)y#Igmv|lPq2E75Pd=cZ8KU>O zBmMdiJuz3QZU%jOXU4OfB6iKV%9pVsPJ1&BcX&LlmU1k#hZ8pjZ*h$qt`PWfImoSU?{tV7w@mCeO} zY#E05Y)D2iU0YZ%bHNVhpM3+{{y4+h`Otas{z~QNgS8m52C<_MA4(RJPi8}Gn)pc! zDT5f-B=1ePH(+G5y0uO4{d{~>c11JiYn;p%@~6m`d@xzS={#rt!f{>wks-dD?pVNV z=esa||FMPL;W2V!MIAmBWwB319ricH$>&8Ocf@gr>Bs{x2$9(=M z$G8{BG1|E(54r!g!jNkX>BfT{relvhW)8Va{NRR6IiH`G4c%QHSIB#8G1s>RPEt** zO2?biE@!szL4A*h&ri}*>bla_b1U|rJBSJP!{x@PR}{poDYN}sRy zSNGo}F{5y&QErT6Ej;6x__zu??9SnAP{=WlRZHC9VLCWcGLD0HPJFidnC#Apb;ORm z+1jRSYK{Ed37VhhVtiWKr=nf%29t$2`nQEO?QS3@gMRcmnvV9La0K_L?P`gkd}E#Z z-uGA*V$if$#X9xh;`=A-*IDK;YO#o)Q{1(RVB{+Ng{x5b#*}uK; zHD4_b__BYS7@2Nwz+h`8^i5{Awu_&zdHh<6eIwYo5n9V%a)f&uu5oT6AIKTavwItC z@f}AOe^163sUFBpZ!6>`Tz(I{j0^ASm?qMKRq;09_4Rn)H#j3Re^{5d+58E3KQ
jGGO)l>50= zJkXoZaXj`HZ0P?;{#KV$W;uneM^Clahg1Pp-lv52{s^6aPG2%ZS z`3cVcw^cq%P&xkVTfeHlu+`OoB@da?UQhI^1Xfk6SNuARs?N{|1sX>1Ri zKR3aizn???$GDsJzb@c-i|m}lIDCoiao!@_6n>z`j~K_hX+H6aJypnWiNe0$NzG5V z4*Gc~b?%-jds%DQcaz42vzN4tGaRtt{SLnA{q~&E#W-RR;~pD=BL*>U#}FJbh;dVc zIRBl(Uc;{x=`5a#Q+@{^8wnWZ*f$9C>^#u2A1>+7GhHb~k$s=DN6d@Ywe|CFkRX5CxcJjv(t~h zi1;#jnO+R8)AN&?!LlczOo)`*dz-D5L;v~T-?^(_jfKbg$J?L4aUxQ}V+sBh{sUkq zdB1avn0OW5g{u*x&CH1OZD@Xpvt9*3TEIQLmw>n84{=YranjlC#5=OPwbzQ{URz@H zn?-UBJofwJ@>wtIhuA0JO#5LBsTFY3Z_46&L_S^l3kjka>&0!QIEW(U%4yJ0Esk8rAFO zopBQ}HET?rN5~m9EQeTw=oi*BBY5CCji zWbzCc=kY@P$nag>quT~S^SwY%?aAc_)v=s=Lo&JYfVjeWIGfHJ%w{tLcdo`8sSh{6 zVQ-kp;qHq$dd9nm0;?}qubitlR*U!bzgo&)b93lZ`|xgydDQ;h@js7gr`}gin|#q5CJllG7B-RRws&$>lEzd7CtmU8A+Q)}c5s6B&@M@N;YSj+dUlBj}JbMevg> z{1I*gR@}Af0b=q5yarbzqoqLJobKJ^i#i`2X>Q>Ql z>Lqb7kF#TN&g;Ty>^Gc;_>OR3IuA0Wrx5?-!Mur(vj>fwuKCQNk?|(U-G(<57it|! zd~(-I^-nb84PPR68)fDD3?h*@9A`HB>2&bSIFFdKHRik~YWkTlhkHJ2@T_qjG4qsD zo5s|LcVaMi5!ck0uuo$qtXD1E&x=^PuN+w715M?ruoftxdX#BCXD{HDsJ`-SSVN{d z%jieFQzFS8w6n&ru}HV@*W))C!r-1!pV<4C8*B|1o^5(?HmjQnIL{ujgRp>Ei8<7h kStEHdFzk;{>;9j5?Zq5wcp2mvHo%B2^V2h9Skkg1zcjpABLDyZ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..28df089c632aa3f97932b3abf01b8e9f0aae34e1 GIT binary patch literal 13896 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 NJ%a|{l{A}c{{d@sflUAa literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin new file mode 100644 index 0000000000000000000000000000000000000000..b71d06f700f9244f77de8c0f0eca905fcbd0c753 GIT binary patch literal 6163 zcmbW5O>b327{{l>ZGlpt5>$elhNW>)F+pOCPJtGh7_MoH0bNv-21q0l1;xae>ViZU zgoK2pF)?AohmaU!bm@k*D?UIM#-;z?-1EO@?%|xaILXX2=XrmdIp^Mm*}>n4}|qF7RE2FeSGng*|DJgRDWsl^y-bZ zTQ_cgwl+I9Ce&{)o;rWx_Ndv;dW{MtI2>LUdDdS9*Amy=Mns510RKh4&Ef5nfoOG9v%j`o~H3UGl1io#>2w^ zKcQ(nJPhzVHI0Xd0iKwQhlc@vwOnbFh0=KGlca5_JG zkN)$Al#1&E{JC@WGc=w*nhrZQrnTtVd-CEvx$vI&y(ebxiNSl~Uz0BzGXtAfR2Fvg za&sdLaF3s#&iP*WX7FskkA|?;tiXq_RIL2+sD&Gx3w-F8lB_?SqR+ONV{vxAzX} zi2W0l{g(xy**^o!BKbDf?R;37UaVI8CUv8kH@5?VGm#6w}0?~ z>*AlU`kiw^zX8cNG1Biq`7uGClH)yPJqXDPv<Sy2Im?XdV#armTO{VkfY6dsVmpWTh6epR$cbVmF2o>h5uc- zrdPI-FW;@o-|(*UUD75mu3Rg8dN4W2(fu8RTEVZ8>3g+N?uIoquj%`=dD5%t&a>&2 z?V-GE~h;h|C1&J~>zJ3c-0PyjYntrj92r7; zt%}7sU`$#XwwpR!7x;ZoppQE>-|H=RBIm5>dwI^$$vNwK=Nu{IZNDkMu*o}zd&c&= zF-GDLeBZ7HI7`v$M+^QWXT_UaL~Y!6ZXh5jDwHwQijh9`iJd$iQyJ4n84TbJWQCMGQ{_Z)dPAAZK9C9G?$Cw`Rm zaGnePk>5TdcBEha7DC#{b(2XH$+=NuM3m-cLj`{=>` zt#gAcxq+YD0NdhuqVH6E29g{1SRKb`f9idf`J_MBJ?En8@tCAwv$NByY*qYE+d{q` z^ceb|!B+m}t9;7u<*qoScI2LqLfD?Rxj(X=s_rof+tMGuR`dt*m7Gr~MnmLXH}>>2 zw3xJX^ap&@4M^R9)D1iI2l~M^?b#0ci38r4v^0k3xo+mG{TZ!u^S$Eypbq`Wxqjec l($X04G35W$hWuw3H|pc4ZGGSF^8c_jC5-?8 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin new file mode 100644 index 0000000000000000000000000000000000000000..7301c4ed418985186b1a692c14ae2b7f5e83cf8a GIT binary patch literal 4519 zcmZ{nO>dM{6vyvO+i96rTE>b*1l8KyV6Z|D5ax##WPXQr`ycCfkd z%i^RPy|=p2`g(Q!=A+hh%{f%@2*d}CxTVhZhqBTKU#Bth#fZ4`Lfu|)Z9PC<|Ca}GT6s8H&JXp zskyA!9ILsb#pZa;<;CVi&0Q!qCu{DCHpAY6X_;`Rvy%<&&Q3-=(QfE^>)IDWj-~ z&Og>Xs6L{8L!Aa5ENxtU!>_^s9X|9&f#gT%W%U6qpo5`7r;kfu`O@lz=JMjoV)MM4 zYo2Q^xs`>>bIs<`ynEJ^E!c(}wq)wokf(8`bga~u&Md6BXU~?;&M*BSVlMh$0(~Y| z8b4;*Id@R~bB?|u$CEYsFCUQ0cLM$5#m*ic`>PXfU}j>%`@?!iYiwvq-%b|f6svMo zv=cIS#syj<$~4-UIHAdop@JWA;#7NS<=o?c*GTtmTDTWcrkn>_I#ve5x!`uum%`nl z#MW2UiFQ458}W<}`q+9Rb0eoCzZ&O*t|Ke|hqvD3d(Fo(H&hdkxSom_@H>%KiF4yn zi0_PZdyKbT4Zgja47|qPpvUB?wMO*cc*qk6&NH8w{XXVqA)Y}#3*I*YL#=={J=_b^ zqj(j1!I&Py`1wseW7y+ujdMAda46ZZ(#Gn>bPho?xgMRzoU7Ets|ZtVXBxx3gFe+m z$4BVoFU4akbn=$cId`A(1D-})eVjCdgU8w4AJM$e36JxQ=Y5F0an%rV7IUvV+P+5{ z_{jF-bI0IgQ$PM_TxFW?EQQ%(#id>)<@czM(3c{qyoKH#lyx*DfqrU8u$A`En5Egru;k7vK^U+;zy%_2Zn}|!d+{>JLqjr4ER8NLG6=~uX^(66;Ez$8U ztuw^)XW*`K6a5FXt@}%-nc8&jM>z$-ligkbJ1hyqi2VkjiV@m0OFS)daKU)_C21b?3GhLvDNDmk^KVxlZ=)hs7FG z4)){|S zah{sLTP!%c&O!}5{-~vQ&-0-h-|iMb;NwR*1pG&daYSU0XMey;A+{h6bG>P&J94t(YNOrvvq)ouNj*80{| z4a@Jt6w7~uOYxqhxJ!ETQykv)!&PKMiqjk07l)1bZg%Ni=!?U?6!-QnIP6Ptle^%s z58U?SOrvw}sK4G5;)cIl;*)Euefw7Kk2K=Tx0?K>xT^ML@yIuH!)V#jm0+NAp4}(x zN3OD&X>^YB_y))G{QnZZ_t+1v(atnF_pbVPQ7`(ii#Hd0z?uEvPDPq<{CjouHTZkO-3g8FJ-N5oL5)7t@jEvEzlt^A60rK8T)Z#r)%?Bo e{`TIlmS@c=DXy`=lQys0lU-};DqqdGIZgH(iTzTE7_7G2zfzrgxif9wIVizwx|v* zS%ha1T1ugGWwOpf8$;LKMdVNDB7Z<2S#_mF*8P6x&UfGF>OFbWv;+6e+;hG;=R0R+ z&K=p?dv9GCZGE=0n11llgU5$|eDM26A0NK4l2V#W*CcuW=!3(@AzVqzlFc7H`prrj zGWzhhe^^O3HM;Wf(FYG#Qmx^_uMdCq{)ac`n0|G%yK@(tk3Tv(yg4@~(ef*I?r+}y zX8B}%?H~1D4?lhJXV+f(%Uz+RNoijF5B2<0&%gET?A?9mQ}tK$Ea`cuhXx)j?Yf@F zF=~F0qeuR6BZ^<-m7aMGkb|Ki=ee#4d;1UG9qsMh+Znx+Zjas`?WTKM_iv9zyLZyF zk+{H(d2ku(abrFWpR#dpWB2aXz4Ywa-dlHeU%io(n3Vq9OX=qdW&3YKy`{9E=NGvC z<#N1xjQ#sBE9Bob^7r1Gyrbj&U^&gNEiXqrjL$TN!=db*4V!t&Rn?blEv2h#S~=Qw z##J?M^{wV%+~~*;_%Ad5*9rpSg@tm+Vx!9#V0mq`7Cu{ zF7qi4=X`eO+9$CeWS`$%ZG8W~csQrzkNC7AOO|a{jcogPC{1(j;kkNAzO1{EF_+~_ zm@;33wLFLY4410bPfDkH*gMh4-KO;HN&EO7IkmCcSGk77TJjL3*h>&ymyTBA$t!s4 z$n|l?k!y5iuJt<0-l_81KhRwA^xgHwSMSB#st4yFS{7QmX5NIcHdOZ`ZDi@A{NddjhxbcoKlZmE@-UWjGu&bQgh%yjc`A! z=2%Z()%q#w4dabmb4py77dm*+!;AHq!YjT7`V@7(1x-ztI2zxHybkd#0ROyi0T``q zYv1ct)lzi7HR1-|>$9jaYZ$ybb)Iv0CS72ZOZT&KX+3>a>t{wTOPqP&pYP3OJi@Pd z1m=?Oh;j5)t)Ce@N?dnM(XpoVtSRTPyQbYa#KjzX=4?)%6FDV@s@6{$t4>WG_AGvW zq`gn>8CyorJk_qSQR=E%ij=fnCy#JTYqAmf@);Zt!A0Zy*y=M*im0hEC(Eij;9uyM zCz|4mnhLI|SK}{qGUJ;Gfb$$S)YFu!KIfG-$Q(E?9wVnFlV=)vr1{*FYwIinLk`mL zqRurGn@7TNZ*+~JuF7iV)@%Fyd%cjulX-9; zcE;=K*;D4n8dyg>U^sWj8FvwX?)%r;^<3NC$m;`F>lAh5F!p`1KD;~kjKS03&%1Na z*fRPu_odDp95=d)aWrwG!ymoc;$|LOW?SThJWaRN=$jEBc@ zo@?1O9$k*Y#@)m`*f;QS?8@qreX$qOmEUf7+Hco3Jgu|6GACWUFfA9k8GM=JImvai zswJJYQw`%=2fvc@_sQw=%xV8xv#wPw7ESZrEjX=ZPG9N%L2k+8YMwhSkAlRx0Ncq+ z+<{uZ*)3lwWCvS{xgF~@?u*!DPZ*d2QxlnhzI^`$ou4^(jY->I1(s1I>I>&{sYtuUC8JqYar`9>o=-@}M7In3h8SmOO z-Bz;(=r(e_p4S+k$l$^HF}5$;b-hMsyoT+%SY~|5qiajp*ss{y5D(S}9^i;ws}l7Z zJ!^`tTd&Eb_Z~R=b-t{lzl@7~1{ZK@Z9L{;yYM78B~P!Lef_U^5PQi(yaxx8;eWr^ z^i{2wrcu*R84^R8Yw+Y6dyJ>$TH?qF`p!B=O~)_s@2eJrnf7v^8B^nd_QP zOw{z?()qhqs->^9uWn6e9&2$VJ!81gT(`CUeb2S7t^37&b5-+c?1?Apu{9{hdW~GE zZ|fx(@!OK$z+4oC85j*QjXf2ZJ_5eM@1JkNWU z93!KjtM#LMh|dl(Vxs5lZ07Mr{Nx-9I%}V__ZxWFZplMDpUVUL#9neU@A7Bf2Jgr;LIl7FC zFfA9ki90H};EqaP)%uyVQw`6pp?#1$`~7co`aH+M9ks*h!X1@deU8h<|{XMa9XpE1$ocorcoF!cZ70B?1SR8204I1*@wrf{lrS8Y&7+tgI|7DC{i! z9sj}(f54er9x=Y;?at1=w=;WtQP|Cz_M7iWVH)3!ll$Q2`YJ0TSt(BAN%9cij%UfC zBMr&O$Y~8vn~RUv^TN(|`~7RTlXySR8B~uP5f}3Ta)I0j>4%-(2$*~x86Y*tG0J6; z$ij3a&+|3`;(t6O#0B3pXQnTK3H^a@dNODao5u88Vxaek8oH+*wHZ8btp_|IxeC>T z4Vfv4nS83ZWqF>#AkSod7{zN7*3;U`XV`7^>uBOv>!J1nw!D`rkVp=RySd9sC0!HO zfT^LF+L!2AR&5RU682!NxCYER<>?D|cDP^1Cs>N@jkax%>T|y)QqXX5CxcJjv(t~h zi1;#jnO+R8)AN&?!LlczOo)`*dz-D5L;v~T-?^(_jfKbg$J?L4aUxQ}V+sBh{sUkq zdB1avn0OW5g{u*x&CH1OZD@Xpvt9*3TEIQLmw>n84{=YranjlC#5=OPwbzQ{URz@H zn?-UBJofwJ@>wtIhuA0JO#5LBsTFY3Z_46&L_S^l3kjka>&0!QIEW(U%4yJ0Esk8rAFO zopBQ}HET?rN5~m9EQeTw=oi*BBY5CCji zWbzCc=kY@P$nag>quT~S^SwY%?aAc_)v=s=Lo&JYfVjeWIGfHJ%w{tLcdo`8sSh{6 zVQ-kp;qHq$dd9nm0;?}qubitlR*U!bzgo&)b93lZ`|xgydDQ;h@js7gr`}gin|#q5CJllG7B-RRws&$>lEzd771Prja8b${fI~ZM%2vnLF9%)H~gEld#iVh?SVwfBlm>irO`~wsH z5O;sUoiFg5K3=2V(vEgQ@z%l;mj86d-w!P(X-)(o-z8YJ0e9>H#}&`uY9;= zJqxN}JQ&XOQ*Rf?F`nE_JwwiTbFm*imPJa>@XHyifkhq71Prja8b${fI~ZM%2vnLF9%)H~gEld#iVh?SVwfBlm>irO`~wsH z5O;sUoiFg5K3=2V(vEgQ@z%l;mj86d-w!P(X-)(o-z8YJ0e9>H#}&`uY9;= zJqxN}JQ&XOQ*Rf?F`nE_JwwiTbFm*imPJa>@XHyifkhqBjE6vzL%)5#hFhR%h0Od%MFgwhVB)Jcj5htkM_Zl)wD3AEV69lF(-3ndvt z7j=z4M8|%RXl(NlqW<4Ww&bg}P}zs?|L)%V-Fr{xS4rRhwekH*VJ+#6hW-8Br2l%b z^S}c<=;>$@+1ZAH&hxvxi|ygd-a`OiIK-y-BN~^$Xa4MPh>dO-a>#SUp*cLRoQQ!> zord{*P8!#J>nH0(Q>{_Ur+6mQ(dH<^-s$1lcshRnsk6TSxYHjbgHCet?&$cevpxPe zIsL#%9Cf2^97S>5jh}2j-NO70U_7+bXWwp~Gun*bpByh9@wf&ab^D^2s~Pu|b3Ie# zoIV!_+iB0H(x&|nb!Ij9)2GnPT`RO0FFW^;abKYovahuLcnhY5koIf(9Hbtu)5>;W zZ9qP&Y*^Za&GXRrw`EIgO;*9l&KFucEM2ndaW(#Bu}3Q`ZS$&Fe#v5d%M$H7EWd%} zH?UZQ6_!sHYI&KG#rT#b+BhuJz%mUiLBRCW2^J@9HQw+D;7r52K> z+$r9nW!|9XeX=%L7cDgt8~bgw%=zDuF8tk|F79CcUZ{qi(tr7`+ItxaJEyJSk)aTV K)Onic0R94Qu^XcR literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/hq2x/vs_hq2x.bin b/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin similarity index 100% rename from bgfx/shaders/dx9/chains/hq2x/vs_hq2x.bin rename to bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin diff --git a/bgfx/shaders/dx9/chains/supereagle/fs_eagle.bin b/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin similarity index 100% rename from bgfx/shaders/dx9/chains/supereagle/fs_eagle.bin rename to bgfx/shaders/dx9/chains/eagle/fs_eagle.bin diff --git a/bgfx/shaders/dx9/chains/supereagle/vs_eagle.bin b/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin similarity index 100% rename from bgfx/shaders/dx9/chains/supereagle/vs_eagle.bin rename to bgfx/shaders/dx9/chains/eagle/vs_eagle.bin diff --git a/bgfx/shaders/dx9/chains/hq2x/fs_hq2x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin similarity index 100% rename from bgfx/shaders/dx9/chains/hq2x/fs_hq2x.bin rename to bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin diff --git a/bgfx/shaders/dx9/chains/hq3x/fs_hq3x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin similarity index 100% rename from bgfx/shaders/dx9/chains/hq3x/fs_hq3x.bin rename to bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin diff --git a/bgfx/shaders/dx9/chains/hq4x/fs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin similarity index 100% rename from bgfx/shaders/dx9/chains/hq4x/fs_hq4x.bin rename to bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin diff --git a/bgfx/shaders/dx9/chains/hq3x/vs_hq3x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin similarity index 100% rename from bgfx/shaders/dx9/chains/hq3x/vs_hq3x.bin rename to bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin diff --git a/bgfx/shaders/dx9/chains/hq4x/vs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin similarity index 100% rename from bgfx/shaders/dx9/chains/hq4x/vs_hq4x.bin rename to bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin new file mode 100644 index 0000000000000000000000000000000000000000..de5213e137f9ec5027d8222e9ade7e7484b3addc GIT binary patch literal 576 zcmYjP%Syvg5Iwm`wbVuZ0KqI3q$X6voz=SNqC&OSZ4^y0Qi=4Xh>M6n5SQX6OR*o} z(%;CUh+oloCTUAAnar7)GjoQ^J#W^GpRJE~g_VKRcORXe_vBhiGoYa`aE6}y(CGTN zh6Wf|RnRBNB-uvw?BH+>z$;C1icVs@0nc#K@*-q>(JyZXp*bbvYxCq zQ^!bW%~+@ndrsN0aO_=m{hr_Mn;WN_X06_=o6VccYqx7w{kwawLttAat7Kc2ZI|rb z^4<wg|8=fcU;q?D!BWtsI7h4&^5n!bJ~=7QIQkT8fj-Zxz?fq_ zpmt2I&KaCPjx@AF-U+`VwIxPKPrZ~A3)Y!mN_Wb0R!cZaL!SKPMe@8i<`KzU-XrIJ zQD+><4B3M^oL5P8WETx>)<0RVgxN03?D=KxFYS>XvmGj7rj^Di<|Bv|#$l2G_y_u& BX-xnC literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/super-4xbr-3d-4p/fs_blit.bin b/bgfx/shaders/dx9/chains/super-4xbr-3d-4p/fs_blit.bin deleted file mode 100644 index ef8fa0730c3a16c8151d82c7394b35a81d1f1d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmX9&OA3Ne6g@8$A_6xMB#mk!?_q?~48nmCWOIo!5(-5fGz{8+?V!0EY8tqL7SQWH zyO+Z`_uLP68TvZAf8Gp65tZ?kGl1a*Xi|RV2#f998vs}nlt*o-8V|rH;slMr(1A;= zqCJGV*3l+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h;VlMc=EU0@HV-CQ*&<5(Q=A;eTu_OMO_ulTl9@)w#v0;@&`!AFgO4J diff --git a/bgfx/shaders/dx9/chains/supereagle/vs_blit.bin b/bgfx/shaders/dx9/chains/supereagle/vs_blit.bin deleted file mode 100644 index 87ff0b9602074b625764555284a5bfa7278143b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmYjMy-or_7@Yl~p}7|z;Sw87$YnPeV?l#76lY>MrM(!%ct&#MP;4nF*Eg`|rLN#P zIOanW+3aNJn{RgZ+i5noolVqLXn*FbV)k`cm2Xx77Ci;CZ}!a@M)$*;4uFghjcrJc zZy@F22u)aGK*;(}!`8sCXCe1wt(JK|cepK{s&ZMre8lIIi+G%7X`H=2KF_LnRL&R0 zJBfFROT2U5C;qB`eTi+CPql$H5C!3kTdP0bBG)H6J+*j5=Vy*w?$T3JGwf5}{U|&H h&dwb%S84>F^c_95aPzBc$tF*El?7ESNI9t8T!)ndNU0uaardTsmLo@4xSJ30k0rTZQ+e2q^a zW6<;-T|i>U=q(IFT}L=!-@neb``KWo@wi^>%6<9zkz71qCRtwON%1ycu6D_|eBZ7& zOpH!-YP2>cHP?gT73wFT55x|zKixEYSAym{=wTYoAC zzoT(plR_RlyxI5W?dl8j z6Tj`dxCkHOD2blN&hGV|)9np<&fxj}F^HW`^!gT#NIbXYwmjGMyq0&^K03hS3b1W7 z=i*V19bT^iq(Czh&R(i2Zj+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e h+R!SSB8MIc@^$K0{>9wzzB@f#J+T_9W)hw4FNKWKTst&0l8W#jqI;;v^1}*T?5k5%%-( zBzq_EE^?7~&ilw;wL6zsp7E;&umFNmIPDhdz)#5azdkk9pPrf>-)l_8Y&hrc>PO+e hE>jABu&qSzLej2y*@6j9BJ zad*8hA#`fLtxV^0^oYDVKhyTt5Fv_YK$gTt9LJ zTpsm5@u}Yhm#pf(|3jR3z!jRE{C07Eep&a+54-R0zV`0Qx4(_wlZ}-}yAX5qb2+51 zm5L`P{agJmK018-^!ViX;Mw9E_upK+yScr&xc&K~z5S<)>&IU_IXvQ~*Inu^^}5|& zZ>jgrt=n(o{1YGw(8(C`CD#h@iYr}}K6Lt5PLEYSUrHaDK9!w(^fP_z^o4Gf`jwk( zO=K+%PTk&1J#_NDpZeuKNXaADhbeRC`zU3;d>^OGk?$L6Bi}R6DUwdMW~1rQ{vXPd ztZ8zX0u$z$7|z`Eo78Zhd}eVEf7NjDoyFrBJh_7V_`CGyxtPIOBkQc<`$#BP@mV)( zuluVP70zDJzN(Msll3~B=a)ybqk0Fdmo+0`zxZ4(-i@)M~m@?<`fOii6cZiRN0j8PG zrD|wV7u9NLF-NP$p-sGjKgu4rn4^6O_h$V4D|kHP@0GYXD!zKsvUB42IN8l)j(8IX z!zM0lCbDP#;hb@B_T)PhC)KDk6=T_IbaglzU|IV5oCof#73cKlfqM0jF_a_5!YIO7 z#`_}^&phr(XM;N9-DXVJ3k2dxc_4emP+yf_Jc}5zY2kqD!t%&Q^HLt!%1<+EVynzu z<#MrPQ=CKjDSu(3nbOx}#c{I3B`b%^SM+TwE%>WuzN>at3jV~5hy02h{OV;ubb15u z^H~_?>YwVq$TWv*jMs+l&nTP2g3ZR+6uK&=tKmcIvy1ts`4;Dc_#nWZ^|i`b%|>zA zXU)@MDEBqW5xy#CL77}!pA}a&daw0vNWO0Jg!0&AejA8ynXG;|+4Vy`EOc(ZXUsdX z8uiWt$e3?*oo7Y8aI-*0c|`rN@Xg;<<0YMZ^RsU{@hWu1oN^v!rHAdV0CsrK z%;p8o_+F{^&JKAz_wLno(}C&`?}T;LzgATRR)OTlcruZ?zo}N3Idy{^(YJ?f%B*=DoFh8{NIO<3Qu=w;d1v z!PA2$kB>TPUH`2A;^6cC$>A3Vownmb>o>$p)Bn;BWo_^M)z?L&3QJ-E{wT{=xPV3Y zbIq-Mjeq{W!^J3cvDi zF~bO*ADMe6a-@~ryOEpUdy$vl`w?o$Y=Q{9v-?T}uGxJx0zbV+{*i>OcvZ*Sg8e1r zB%V>(LGA>x6V)R({F0JB1fNO0BY&0j{*=Blp?9bBuKb<*W49*ss1aO>_}E)=%lV;h z)L!-vAs2e|0=7kcuK1|e=@KTk+5%{1-Cy6-kEZ!I1r;zFOi_MLg(o zKA1K57x}8FC%mFZyu98j>ba^9CgO*=p8Oc!l`(RT!P)RfJlYHkeHXg1)|2s9J^5qj zz_sX?BVjaC;#br71^*iAtCjS1)fe-qp}zVRy{1}U|In$LT-qCc-H5rZj66CU$~K3s zk3A9T4jQmwKe#tlmCdt38GADnk#DJ|J$!SS{BRa(kEs`xy94Z|#xt_9XN|Nsy)!c) zr#WD*1hGgkx+daMp3C^p>wU`egERBnD)%7&63@#IoPlp_h>d}n*%QP4paMJcqF-C( zMCV8zkhRx#PFZa^Kl07^tDWsJ?dGsk*qNC58Ea0i!{$2XYd9Gji_RI3LeYW!yoE7w;jfqpmUZt>4_`X!k6Jlp7^Sgp}j$%Fi4&b|* zn6H@Nxo19u1;9jv`=WVhS5Yig%-R|349`oVF$=q%Vr4EOJ?v<~k6c8~2DGvKM4G@- zoC_mx8ReYG#njICv3UGe5&1WQZ*1h^+lDi9#Y4;#`(<_xU)rccPF?9~-zC)gG%w>| OF0O?9zL7Xhk?ns2?uvf^ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin new file mode 100644 index 0000000000000000000000000000000000000000..217dff8808821aa7bc69f4c93444760df71dc69a GIT binary patch literal 4406 zcma)9M3Nr2OUMFUFEotLGzD z?sos_-nE5W@6De!vsL+nRrQ5z-~6KvW3zPgf4u#>6V9AnP0$eB4?wx3#E zexWb?Ha11vf5iLg<;zROPk~euo%Z$AvrFGCPF?=_$#3rx=fU>+h4pFs;NIPb_qXqV z`snQIH{UqBw7j}}cJ;G68=DW$F5Lh8!M!alW~R?gpPQMUo|!o}^Y(>{Z`uA0v&w)q zGliMc=dwNr`n&+II(`7g=Y?5o4!joZWj8k`-2cE&IiAf0eC|N@9%nGb5l)T+;dX%i zkmD`IZYj3^xqUsvp9_%dE}zjBR%EE%-3jZYl~^-hms+LXy4))F)@dv4tt+icZ#~db z&$(~4r9OSFd^=WaWK2=QbOfX-ow_ZTvjgRc9hX4(wBq{s7_6XWK#~-C9T); zb*lAVzOHHARgMt9Y?Vxu?2OAN#zUw2-EL61Q;o8E@OXo^CHV*SXKAomYYp10FzT=} zHBygy@Ej#OBVN!Qx{o;Wba$s>Yef2LVV|1nYvhU&r+WNAyWgPu+QZ<(%!+jen?pFN?h)H}s)q`Y07@ zZm4E-akfTX-{1R&Y92kNPYX3QRP#xFfA1TX^z_t2{Hm=eXQ+8h@~Gs^6mkeMm%Plx`aUU_`R3Ne*;*SVUI{dgfSdBE_WDC8kGdBNtD z2b*$X)_AVb!5?`hr5B%imzc{u>*~X0a!g5{%x8$6c_%S%Q?~2-MlRw6Y{jv@9QHPH zQnA^m@If4G!h2=*scPx)P71Z}di}`5dap4HF$a2Pp8dx^)OMjWY0sR~y!XyjL0=bt z(LQn`eTP1fM{KuKwQd%3a;yOyuA>}#h(7Euz31Ff zb1U`^2DiwZ=fyb4k#l%J*7N6_hxNA=A=?RY749OzCSt)a-e-pF zigOy|zZGl3^Rh2+K4i~bANx}+z1e~DsL%JYO@DCS6z2^KoO50^^7|HNQzPe`bEt8Q zbNuOpc>kAk_<_6V!@Ls%e#1KOSL8R&7SAbtY9GAMc;Awr_nGs+KDi!ybokRJ=gx56 zCuiJn-Y4hTaNZ|p*Kpn^cRuzHe`+Kia&fj|4dB!qWqLu5KFn6^lQs5nj*33a4et#2 z#0D8Xvlslr{K7-kHZtZe&WC)Q2a`Sf9reiQz~Di@yrd8Nor(v`c}OkQI^3^Q@nAU* zCLXw-QxiRqk61+>Voq@Sjxv78(TDePxuY zQe)Zn^tD zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin new file mode 100644 index 0000000000000000000000000000000000000000..74e32bffacc40d4512ddf849aa5f6ef447d2d349 GIT binary patch literal 4954 zcmZ{oO=z6Q8ONXZWB1)%uPj?qoX`fMW88u(;Si!jY&i)fg;b<*mW1>mf~~{`2b;)A zo1ESyy~za?2}+@b^>tk+^i+DN-CLo_y~mme;y~haeChW8n|Wt;R#w&??>sZl=YRh5 zvHt1BSIg}ee)!A6T9>yjy?bpXGt2DQN1Hdde!aPU_0z4Dg{;&_|C5hC-u%_p)%UO5 z+`7CZrP7{Wv|=*(-{c*8`OOP2J#A(`(KutJzL4#AX3uKun!35QJgqzy9g`I{MpJ?qB%(&z9~je71ZKdGv$7tiS%- z&Gm2YJ^Bao;m?ij&9j>;_VcTkKD@qt{k@yZ&%SYb`PJ7hzP5bv%Db1hK3snJ`Uf|z zUQ=gv<;=>N)s>ai)ibNlpMBvuyYmaPR@>%BX6x%_|5dABR6Eaj<;ICtpVvRk-DSMv z$M1ge`RC_e?7emF{-;al81K6A8~>Ev`s;&%Y}TEho*S>v;VFEc(Gs+zD7<%lKdUpF zZ~A$i$9_>4v0v6@?6>Mx?6+&x(AZYB@^*d2+O^L7NO44qLbmruX7_g&-SQWTeNexo z3B^^6Z>4)M$|dJkDVKv`+a^)YrR$p&g`Y=9V^)-n+|g3KEm~n;Hu^;qLp4Zu8Y9?f zeu$5jx4G4^N6rUwOSYAKRyJ^Xw7t%beDCyRQ%P<&ai~L>Deg1|`qUBf?s)we1G#f3 zMu^KewKVcD%|pY=ZJ=gO2ia_VgwB|8hY^01>kf_FiS6r~VhCo`LoHfcrSjuL| zyw+I#>3moIRHt(A{-_;aU1wuOklSV>?fVk^eZ0X)dP6ue9UG61NpA24qaisn4=(t{ zM_ZhNLzRuSMw94QF`VzfkG9Q8-j94j#s`hH2McncAyW(ez$f&(w(s;i`lf#E!Md<- zB4?*Io=-jbQ0;N8k$du4sebr`k7Lfq!|0>$;|`BCdCW=fCq9tp5+CFm{4x$-8u<_x zI*L6|3w-Gax5*JY@MY3)YE}o|`m1@*GxS1y)wx4sjmVKY+xDHqNoSAx4`PjA35Gqb z2N)dJe3i`4%U<;lk2e^EwVIa=90@W!B0jjoG2x^&gA-w`ro5WkjH8Y8cWC4c?)U&h zc!y8&*SzB$_I<^N1A)73;fW4BIc+Va;`Z85_gvn#OgP!d_jB!|&@aKP8Sm6O6h~bb zuWT@5zYxD8OgulmoYmj~U%i~y?A;)@tdy@*?!{cwV_V4*Pn`Bj){C;PHCgzwnFpmFf-t$=9Ey zoDKeL^?PFKub1S5zV2G(yQeeLpI2VrpY6=EJ}p~gP2Anay!t!DWPaYwZ^(Yl$;>l1 zFCFGjNQTewAHFkxLUUc6TfxUkjcLyeSyyZpoV*w1MQ3w%=Y;*i`DA`UJ{B8&>`zM8 znA=mx^S0+=Xgtkp7-V#~f5M%H&y%)x3qPDsi`usf?p)&R_U9pI`+{mgW{;5TlJm3S z_<`LMl26D_W&Uht?3BiqboMg#L}T})vs;thp2OuSC)-Hez4c_119neI|CAcG#A82b zy__8~c75AWt^U1&j1Bifuwji@kD$}Yjh^>Q9ZQKHFVFgcE8=eS)5z2o^9y5&=kVd~ z?*m@(e23uaE{%s$PtQaXBz-1dEQeQGqz#WR!7aIfdu zw*&6=+sfa)sm%JS;T7q;qHkm(KBa!v$hqc`(NSI{Z(edCH|`8_ zW{h~;h17^1cc|{x5&J#W%iX)fzYEdx?-d(?L8|B9CkOB)#!yb~eaT%NVszbagu}K2 zm&dFgcmGt6x1=zL{(fXaGh)i!?%vlCFV*MpsjSfV*P8#@$>#7Oo}c%4nq+T}%o>5G z$B*}q-7fT&$kaT3bMiG1e)}%(P#gHAIafB9I{Do?QA~34c%DwZFMzdeNEcm~5zZ?NUuO7jf75J6(iUHv{x?E+7O9Xt&!;~41p-+#W} LVQoi~iIn~iw`TE# literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..c76166bf10a7ddfa033459d41285f0984f0b218d GIT binary patch literal 4874 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 k;AK&BM^5Xnc}$GgHQw{O*5AD0{r4_rvT$N&HU literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin new file mode 100644 index 0000000000000000000000000000000000000000..abd1066c35b454f8e582613c4225f35638af9d5f GIT binary patch literal 4626 zcmaKvy>A>v7{=e-+q*r-XP@mjjs!??K>n+PkX%pz6%7;|&+na`y*($&S)-lz`+1+4*&V-d z_H?#!^zk<`YhGNtaQ@0tVwNz!a^w75($akL=IV{L_g6R8KU`ayOEPIXAKZL*^}V(A zw=UmUyEw0a%tY8xNfIjJ8|*}GkaTlbWJ^w?NhUh(iNJf)>Im^k2OBm_)4Rp zk;w9mp8R$+QUie5eT`o)Z%>LHkmq|!@YJlZQjSE-TF4^6?cgdRgAD;f}l}~?o z$8yZ9Gv?>rOP_drs8_}v*RvWmW)x4Yk#C(Nury@PYWAP+tex1r^4Y!bzC7L|_r~Sl zPWBZA$ z&YoF3d-?puwd;$guD)|^{fZ{bONW;ZFE1@EFCSih_Q=s^?CvXO&D^>Jvui(z>DbRb z^ljH$Pxa96Xt;hN=q2}hW`)L^J^c5%zIaZ4)erq-(39g{F#PKNol0MndfUN&D&+44 zU$-4Uq@~sVDYTATVV)F;b<25Lq}9ApG^%-4WYxS`G^=^5XjSvPQ2(As^|q|t9fWPv zmCx=#`>CNis=M2tw5@?KG*nA@n*%}J+AmzlsqHGiHB?*kVbNBs_F<;_lIM$#%?}#( zt>P>TK2f(TyEX7jR3lR!WMQRdLCuH(dsDiWb3y-B&Qs0LmGeyV?Q-7MeCW6mJEYoR z+;t3Py<);_Fk$BgV5d*j@KKkEJ6U4P?GJIZJAfmdTw%0w4u&|-=%LiNwI0-<$E3nQ zKCOXb{_=dmo(gxs810g4_Ur+Bv&0kP+Yi`N`?HGAZ9HE4Ti8NB#OKy#-3mCOzV^BB z*5ecLHL`2JD}IDOx3t(-+SR|WskrOscFfmQ=Yak>(IwdyO!4E!-+Iiyrhd=y-ot#<^ zy`#-#-r?%Ik`H=~V^vM$gN`%oXTA-r`9bx@{)Geb2HlG5Ml#=qUK$8$mq zx~|Sc%o)#8l(DmxkIM0|n1zSNjMkqXn>C-kJ%cUijyV?*E4bi>?@+yN+!IYZcB|eW zT%*%kY!VYVxb6M!&4E0r?;-s0KA|QxrnFX^CuH40{Jj)q@-5hr%?10y_i3<)eH#6F zS1E_~uVvT|*zL^;odb0ElzZFvUA!A;&$$oZSb77;!k*sBTKX0Y2emwX@)8sC!UsKt z{#fr7&XUXIpw}p~r})<6PYz_AG3PYyE3okGiswxCB=)nPfAI4@QmujV-jaS39X{wJ z--3^r8y?9EM!vPWi@OX4dZHG0EcN6)az|>&rX1C`f%{OjIWyhX(Zo)n7U)kq9o*HnM+xIp5E;*e$3wFuD zj*JaH;VZX9@qs(;FjjKMeaTAhxEoo?orycv4a{&?-jBz)i#4f14^bvA_Joc7NDkJ6 zIl6Kk6q9%zbnwESX$gZ_c)yzEynl5+GVdE1Uq(15ZufUIavuD3#|!rf{OJLIYR4Ge ziTb?PV~lLt+q;|llw-0MgPk1Q3BeKlm2Z;~?J+-nMvRlfpt}~|2G4|tHV$-bi3E$us#n25h{r%dGE6rU5awKaIJk)x^ef!r!}nd^A>Y!&o_ zU(=Ijqh9AT}5d&Fp{wMw#9K literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..2676fe0cc094a5f46fd5c22015ce93438fa22b41 GIT binary patch literal 5026 zcmZvgO>7)l5yz{0dOYLU&N#Lc@g=Pf2rZXjD=V}2O(zvzp8%i9*2qAQ&q1%|5fk3 zo_yunJH`H+pZ->1-J5$iuHW6r%rfY^53jFebD|d>?LOT5;qLyOAMb6fWQ8P)KYH~2 z-5>1T`OfW!dpFl)P}uvc)|pQKH+^Jpy?5p6XUy!Ek|Ueb7rgzgnjowDK2y^ZA>e+(^Le?|NS7`LD}*jcs3xpU{&l1N1)2AAR0%8F`t#E&4q@ zH}37-vS-hp5h?S3uF9WbLy2${q*&PEjGiMRdFJ*JueQ6a@8;RRef`1x@9pjHOZV2T z&mnIhxp{H(i$$#;|Cx>77@S`t>z8Uhf;eQx1 zx4Hb9MxiT*>hVF)S((|Ort>my=uX*b=%Oqdx?6S|daj&n=w8{YX~jFR{-BBx8%XD< z$`w#?6!&PfUnOJ9Y1x;pX0%Xz@oVLxtyLZSz3i+A zog_Qbx^>XY6r+$Ic;!mWl9(w6*1M8v-w6xqx0=pH@6>c5dQ#JU(NoVWv)2@x9FIJQ zI$n9ktU6;m6}eNVV))bMvAbI5*s~YH=%@lCaxmEkO%91JsG*kk)eo!Y-9Bq_z@K^` zn}55%SkIMr=&&^yb&_= zwJ$WQA2szXSyrBH>7SLp;*XG_KahSl<3BG4E&YM?!CSHs`4W#

x7BAIaa`O#I>% zf8dw=kq@~fe~HH*@yM^I^(A}a@!_TG_`I)uQuE5mszsYr$iQ&HeQrrU@w}EL>$du^ zEL@hQllpj0>x$FhwyZv#JGGv*=3rTKa(aDkX1(96QwQ;>LovM$;)$NA1ApK^&e)vP zanh^2Rl`6z25zyA&%Bkx;Q!=U%&ec}Nbj&OX8dO}H3UZ6in--AtVsWyZ8tT*uXz5^ z3u;)Etf$^lJN%mX)w*tYZ~+Ho@SHi!KfR%stgnd{`XSPtPx?Hs%)$@Efvim!0sO`zIK6ZR;^}gCBH=jZC?XIj5tRC+-t|L1%qC z2J1`8m3hKm_pa}`#7FLz#^>z=?^CQFjmbah(?|JG|Eyqr&7O?sb&erJr|vEN9H)Cv zn7a=5N9yt%+)rtqq3~=aj{|?#Wn(XAL~TPH*C}59~U^&T8!R1}-|@lRCoAYV1tdF+1eP9FPyb z+SsL-$iXV{*uf_o<`EzC0~&pBIc)z9PSr}cg~EBmSHJTuFGs|Ve0DqzHJ!-JW#EL2ngyQcJuBN8!6)13>BME^9rZ=c@YJmRk?Xgg z@ZG8DT=b--3(@I4xF;-`Ypc%I^C7&o_n4J?td=^c%Gr?vs7X{Gt} zxP{_odf>?uf5c|SBBtj(VjZ8|WM|6%sp@>{807Bj zxWNdXeH~B4&g@ur$F3i-j~k58kGnSVNx15LQhh(xTI8!-9TV~gqhy1A$|2stLtpV5 zj8jgj-o%5c&R)kf$r7dsGjIe$@}?&Fa17DMA9(~`V7lWv#{RXMju{Ji%ow%N zEBvOpOg7A7t{&hs=&)Jw-Y{2Ia#mrB&yHg0H)&1hqGLaB-mPjs5UZnD*rZsTFWQIh zzfi1B9ZUa5A$lU;VWU}TexGJKGo?3{oxd{#KN)jQr93!mgXY|gy%^_i>_yI~j%GFG zLGIYZ{tKI+3(2Rt!($&lvUzvecY0qO7?&#LLv%svKyN7Qrx literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin new file mode 100644 index 0000000000000000000000000000000000000000..5eb65f9a32cba033777d5df386a96abe117a2f6c GIT binary patch literal 4562 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 rgB^_<#q+wXE0EJJYJ^RG$9_XAN_C literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..71b03d4f663459795fc829ddfcc3630da5ac2c99 GIT binary patch literal 5310 zcmai&O=ukF8ONWQo!uR2Wvwl(L%$$8h*Do%35OCLTFXu-DWs;Yvryo?hkkN?*DjqV-yhj^9URsF4>y?eJFKYC|(Z%?{+ z?|vSB{cBWGzQHl`)2t~tTasrD`Cs1Oy*7IA^XI?+_0?@0?%n(6wGX~FI9~b5+A(zb zncr@IXKFyLs={o!!T4 zuRVPG(ftQnY;IiMxV*WsvAKD9^GjD=eZ`)A)2y9azcf3Jc|JEQw&5>0-;PzrZL{y{ z`G@ltonN3YU4F%v(eKs#qT)aL6a1y%XIqNc9P4=w|D5y7<6pe@>FqCm@Znd)H~7ml zeR15^)t5C2Z4v76VOS?cV*P5J7HPe16|H)m6tk&Ly{MooYR-)|uAhYMpC6bzEjI<6rT4 zEDJeJiUqTB!GKJ5!(5BcK1 zV|kG`UqtYcf=Q|%k*QO~9&`D?!j&n*6u{P!C6LB4*_vvse( z_KWa+Sm&cttT@-uN4{X|2j?n%?IXo&`cI4HhCcGHbeClVUg8lS9p)j@%m;YU@65%| z&iKn4{=fsi=r7XvBVO<~(Ox<7_|Vez`g~h6TG7H}WzWVXJZh+YDZMT6$BwHnUc1qU zzUtDK4zmvK^OCEtb=~^v)A>{Kq|xWTWoP7_IeA{o$%FWsQ(}4^#M62%58_b=Fk>^z zBVZ)gw2{NIFrwegA#Gq-{y!MAIr$7@tU)&CKbgw`%pJQyT|I{jqR-onItS_|AmOc3Kj0|&JH6>%o; zOI%^E_t`+S{MOj98OSEsg*e0p2fXW5F0IC1;cP<|&trV5A3C4S_wq&exmCx2z9@bA z3pUPJdVEp2Ft5Y{YvA2*-i)5qbTvyJhZ^CxZ(C2JUu**Qt*6wMeHvmPd3@+ao%O^7 z5BkXUK008Yp!GiXJs0VhL=WuBXkhPopMrccda0o=UnBWYJuE}MYDc47=NLSER=xGQ z$M=hB?mC?LD&r^iDxE$v59`kpPWK|#J|B=>U6*}scCA=I}Ck%Kx@Xl zhVZ}}=4`8;vv?LU{}C%aW41ZJ;bpe07>C}QIP>t7Z~flZy#ks#_&$P`u4)(Z%d9K; z$D?zak>C@0er~9f@+`ru9*w9c_~40tD*hO*bfI~!hNmWDjTJqEwBWe!Se zz&)fTy@-_=mz+6wIr_-hJKQ-2mWU2_j)A3GhdakWXVGeP=NMS7b+~i1G>7=do*eK8 zt#@e|?;H^WeDFt_yrAhVvN#XWI!nEmO`b5jPOL-p6X%l|peE4TpYE3#iE*hLcetLt z?zx9L{#$c25I^9ecDdbY$lbnvcTu}2uj2cjqjt-xotooy+$)IVNgA4Oetmke=5d z))ZgJ>5b(6Kr^$@OFAdwypm7sL$uKy3DyzV~uU>Av&=hp%cb_~H0ZSzqp$dUfA9^3KQq2_r|R8b6*uhX%=pF#cWIMNB6%iEalbDZ`+e;83vNHw znHTJXPi)2q=o2e3OM}g@VKY4Fp0OF$Hu!0|Z#w{M#I_=As;B$m+fe6bRkIMME4#^g@Wyg0Nc6{@741BY=i<0wQhn#P|j`D*B7d*c2LmlUN zp?2$YdejEH=nvaO@!&-a;Z9@DBmaPxZ{zr_zN{V`YCeZL11x3#lUG=i$a1yAb`OX^z3SlCUJ g!`O4M{DS)-2g_Hq4*6I<&^q+Va%R)Y>D0{r2eY~(!vFvP literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ae18d96ba8ee3c6d07783ac32a9234af177d09b GIT binary patch literal 5074 zcmZ{nO>A6O701teZ$94mGqK&Y0;GD`P$}3-Rn-fKlOj~4U=_kh6)dbOahpg%iRu(+ zS2Kd$1j)#j5E4k^?F0#l6=Ffc4hh(^B&t=4R9L4QhX3!Lci+3?8Yfrt&bjC7{?Gs3 zci%T|ywTc!?TgkOw!)Y_(DvW}I=cId$G`jam2K?zZ$G{Ihi|SuS^3HO6Xfw1e!KnV z&vv&zee&5Kkx&2K-`~BwyJ6qDbMw7>`}f{?u>R6_F0Q|E{l@k68@J!SwfElo>-TT`ognHIIwbgtUPLeA>XHCv!@5Eq0NPIpA4>PLV1j=&>Cdh!<|KC{ zx2qUQ%!j3FDs2+#s(hsDhrG!6FpnK;6Beqa$y>^XwRJ;mD|(VkJE>zJ_mUW~HsYd3 zW_@6Rj@roUF`C*=+f?!})4WS?40;E~9`j@{FPWTG z%pvpm6CWFLw8c%h*i{W(<%xOOANWO{wQW)IQO!$aVlb#3&S1|#rVh{Ryu`k=qhR0B z@3r6q_dl(9j)jGqw`C8|^L!MX8*jwT*s1Jqxr;fWQ8`UygsA^l1yqNF~ zc`1oO{V^_jWNM*r9fSic_WH^fe;yO5r~}!v@|>D{ju(kYE2b?|j8B z)|hgE8l7v;0^W1NrDLDexX=@NF{i$Q+mhzH$^5eXh1oD-5PQBH`Utn21ChV<4{iw; z;SIOE=P7?1ALlPVvL7+vC%qyDIKyA&+x85bz+e0ql^-rOTxz}ir7%wA zOc=R=^7S+y>tUXrW);_&pR>HKpZR&s=ZXKk{J}QHUkvlU zSMZ;gKmAMRTQmOU8S|-sR?iDx^^^Sca;xT8JBc?ZeBoEj2M629dV1F2&3c#@o`J)@ z-qz>*J4yWB8S#aG?cdXSV}9xdZ|W7sb-mpr-ds`-_PPhi{!s5xKPRY9z9X$?#611U zZHu0ScP;aJ9>qPi9Oid4w?!1BI}ACbPwN^+85^y6NNq9adE0tO9L}dz z?b{WdOK=_jqvIX1B70=^2!3lJ&dvaSVDp^hbBYtsb95J^TMOs)Wc*y^_k8f%lHXy# zI zEs5juY#g`(FJhcZW^HwSQKx(XAMPAw!Y^duUdO29nR;~>4jhbmkU3M~Xv6`Y!^3Dp z9L^PZ7;QYa`+*g4)SKET#*Mv#pYC%Qa92%(O1QI zv5tukG2y@08t;PilKTQY*$G^xMtC7kJmeh{^MMDku|>zddPVPLc*%K;t{Zd~WO#g$ zGGwE>_OU-(cxFwebL4^gUYJahmbR!Rk`*I@AD{M z&~sMFh31j5S&_59Z|#`ccxO;EI`aA5>m=Cuy?Qcczo&LZxOarJF4%Ej=?M=oNbUT7 zauVJvF^6i>+8STa(bpaFv@dv_w&SkZ*l{Nn26enIo6xH<<=xJ(8ZXTSxwJxS{g<8@ z%!5zpPmmo?dgT7d^awm1Kkg@XT<9*5Y53X}6|*n=xMR%Xm)2a`Vp8+b41Sz%DSpbY zwLSa4_>p&(Fa06)MNB{6kFzmN?HtplM=uLga7}sZn1SI(!t0|76X!r&Ys5VlN8!H9 zZQ=M&$-Xxocisb&5QBXKt|{NpiMN55#BSC%8K-z*2j8&aJOUfn^@EO{I9^M#n@D#c zy934c{lorfYhXjaou}-h-wV5piPWX4wLA?guFJ|lD zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..2790a5c711c310342e373e69e4e750b39e200fa1 GIT binary patch literal 1880 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 u51n`0ax>Cbp literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..e214f70583294bef212b71dcc275cfa9f1b9a105 GIT binary patch literal 2044 zcmZWqO=}ZT6umR^CYhv#fOMrov(!yVs7Qm0CM`&X8q``4T*T6*woplFs^V^f8(}I` zvQQVoxD&GwT!{>_&2D_^6lEvc@Y_4aLvJow!9GegU=ld z8xaVTdl>r|J_h|PAkXmS?-hoPp)lTIe8SjlHMgbL>(SfNe^@lXYBb?jYlWkd>6Bkm zH+dZJsG%0deS6!i1$!^Qetff7rQP27QTu#t=H$%N;tB2W?1$=&=Z)&=$=@%u$AA0n z#(bkB*LOD$TJ6^MVe!JPi^Y}IwbkO<&c;^rpt#(6u)n*9Nx3vvnk$z|wl^8CUj z>D?4@T`7d%tf3=Sd@=k*u4l|Tmi$Fx9pAq)i}tu;`67j5Gq-&!o;$uB&z0}QbJth# zJmVwZFgEKWhn^$Jv3P}WNpDF3{=Z@OL+qE0o+F3I70;n(-c z2TjP+*L()I5tqhAP7^qJ)3}?$y$RfsUvWInSqeuVV2}81q1F*UaVHgTP2l#hAJlJ) z9pk7UWfxd)hni`deBIba?}-P<8Q>l$ldq4StcMx&j6K4hz#eJj9=i#R*e7t9J)s5{ z8qm|Y$Hd_u_rOID#&MP6_hOuynctQQIiOn{YF6Nf9ndDfEp=cOU1NkJM?n2qjgR&q zE0&*4=<|SE3H=`QdkH+J@lpLA^ykKKC!ycN9!}z;{&>hA;nYw5EG`jp>iUe{N{4IQ z6WY*w#QosDxWk&V($#g~JyNV0oIyt3hwKgO&SOm_&Q2b>@(JBjz%%kQ-j_UdO^xA_ zink|lHx;j9oOR*u>ptd%=gsJ0U!g(U%%79_ASbW&KGGleGN6Vi9=-wZDr+R3k*=l~xf1)__pcDC+-c&Ts{xObcCMT7+r(7G}73At_-)N0zoo`0OANesS^U+pP z*FGcL#Bi@fW;Mn$7jaS>`N&Hj)@E|lwat5I>^^jo!_qdi=o(p*4V@l(OHRh4W?c`t zsl)hGv=41_kNU7Hy8nFpaBs9t4r3b**2bPw2fiV>dEdB3UarAD!n%Gp7>hahOkGB^ m(l#|m8p#{gZhZJ=>$?m-)ahl1bq_+m@8a<-SPuvM=lvh!Nu0F+ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..1ebc1cbfe8d365fc3a43f233e7053a44382eeac4 GIT binary patch literal 2156 zcmZuzO=}ZT6utAAX<7(KS1L41-IRoiG`MJzf>fwQtp&kFENyBFm6WC`?k2bqra~nP zbs>y9F$=+!xX|wX6~ZiBRM)yOp7Y+!WF~dm$GrP_&b{xxX|Jv>+1>ebcTI6N+Z*e< z6+^_3sV5H~wH~*3?r$HoH>aVprS6F}9R3}y$l~or^Sp=*v8c1~qAV{&e&clq%R~gi zlus&gJblO`o7!2rbs2?cxQ%^R0E3R;~Wh&>F<;^@6 z^4KvK#(jI+ZUnn8zkYnPP^aA8{@(a}ZTk4k)ABLp@a%{BjpwcU$?=~rl*gaFZfmYp zk?T7f`<-rQ>!5t$*2VJD^6GMVb$flYyK& zIF6J;^n!X3!o-3}2*lr1z$8qE7|}bnp7W zi(?BuFw`C(N8**jraF=m^e2#`5a(s0=fIPAPrPJr125Toz>{!7#nV56U*t0%I6?lU z@@cz?xV+twC}U^dyxorZ=y>mx-H@MYJmxHCM;{>TdKhmCxsLMFZsp>QQ+6}M-xM>o zqkfdl`l6mGHB~S3*_nLS7#_|7{r!>h#Z<$8#D{jt#ha(>PA=X~?c~FF_Ro@j5BJWd z%>1sbg)YvBI?Mn$Ltlel)VX68Adk+;1ur+ls{lLXl(#FUUl_AXrq3?UVchQI>|Sao zZ{m|TFjC&c*W4vcYNL#KQN3mzMuxKkPP8SnN6tnD)A4fPijZ40rUaoc%}l@pV)z;W-OBvxcZEX zD(487IMgw|n86`7aj9zphdyRz)_B)xWB-UlJNntfomVoxHF(#QObp8KJ!BoM*+Gof z^;Hh~Ov0xa&l!F2ZC5inDSdUel}k@DgFVSUVt`qCa`;(E+O zpHUuuFFC)uPx=mWel&kAN0<*{8|sdtK6Piw5BEvoBzf6u%#6|{XGT8!7I8Mnh2LM! z9%qy_@Xp{JqV7ZJRbBL<4)P)N0XZje#NzpCPIjD2b0U6n-$p+C8=>xK$hyQUs5)F3 RqISXO*F(OwaL9ia{sAj6vBm%Z literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..4062e1231496b7b6a975f9677cd62573a08a3c2a GIT binary patch literal 2252 zcmZWr&ubGw82xrL+ugP)0qIGF=BSsFP!WTNrY%T?TGUz)JjBwbwoqwltKw~n7a2&DrnSW5)U)^o^HCW-Oq?q%|;%1%# z@~8w0*L2~o|TU&$7es*Z@y^MPmce7rF{Cgv)7nv zROH6y>hAX5_WFML!tIOY`Guv0^3ul2T64ENxBYNua|@elWwJ6^tyHSj$?D~)E0?5m zOC$)S6eH&h7^&lnrKhPMvU;fWG;If3U!4Fwfp}V^bY%Cw_R@Vp`{`ckLb?yMO7}w= z^^(|7qlVd|$dN>)c-9=k5EtIVG~dPF8sQh`G5&^ zx+b5s`-sciMNTqy=FQuKoIM(_d-5xd$DHNt-~n%u*6SW-c?{v>Wq1n3*I@=jWbA#OL+})xvKKNuh3Ik6-am&BJvuuvGQW?r z4HJx%VNWpz@EL}VyhPxaF(W2s5ivE>7v+&m4Bk3rd#yp=*29Q(e2mDV$>roIBip&{ z=Ip?h&Y{D>86<};2WGVed@UzqCMcVlqZTW2)XXe1$0%&X#2mBer)Yfo_l@sE5q92p z=A<2Ga)5Wj$atUdtr?lKM;X33&aAF&a?ocCKE-4{iJ!XUp6RjVZaE$A5#Jlvqw{k- zQXT_u^dUYg+Zdjg^Cx~QPiWo==TB^$NzNJL$vf^vD)Vj?WvW$_H-^)szZP-PpEB~b zn4f1&c~siq{6p+GV@{p{xJI0PL%^x=Ar|&(>(o--TyExokC`p@LYZ6;Kl@=l&aeUp zlvxY&2ie*w)0cIeKV|00zUSyUW=;2&@D5Ps`_6mI`6hPzj!2CBhtQjT=mQ(#yNA%X x*pG{2UE;O1l*z?f^dWZl2K9aTH;7ofG4VaK(5^L*c3E-gL!k?(!pzvun=dVOKW{(kY>S6hZ}&ClMb zwfx7e%?;l(3^By1`^!tKo*}poZBkcjHlF(4h+zX6ezN(n_Q-GCUupUEQ5e}WmKQ6I z|HX?keYY|-CL-s66SMI{Szd}1fvplo5JPhEj5xk+91F(~Q(h6k_ZG)QWQN%zfUk#R z;xOhHoF6!Y0I;~tdB7*=_H_ zTybG#sqSwSr`H~=H&$^edE?%A$@5C3@zUjqE0?5uN5pZY5Q+qoIQvQLed0NV_karz zbn6x3d4)?k!F$vZcQYK2iZyu_Ep{MaB0KtS1XzOPZU&|l)Ey2x;ub>M@NVEfrN&r* zZvRTj+wpSk%#;{H77B#MX0wLkh_!klBc#i0MCOqb`y3c;&%FW z!iG>}(Zye-B&j-5!d6Wn9 zd9V7cZBk78F{X}jEo6Qz|5d)39JO;&4;L}_%w9rAI?9J}bLg9k+_Xt##K>&O2i&j= zd&(w}`!=k>hK-GSV27Fo>DfzBcf4fuzmweAJAFqw+*2F&D#dvh#zzQUBlnfEq4^?q z6bwPe?yJ0<0cGlG%h^pO{?OqqL?L;Z;*wW#C$IEwGG~G-Ug0VDs^&U&Bq=aNAw1GXa4N3DZdB&P4>Ufm%TORS6?sS%bupYXhF|C7wijXtmUiQz_vI) zSNJwMiW7Mg<9oKShm@I%nBIL+GWij+m0hg(a+bvSUNDz7IbcT=mQz?&VS_oa>)4S< zs@ES|<=S;s@h(*# V#LZK$d>98jFnSlYNf^f>@*f+`b#(v$ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..bdc3067c871b9b16c49e48351c914d6773bee34d GIT binary patch literal 2283 zcmZuyO=u)l5U%&8d!{Fe42(I6kU4lzkTAoF=qZ1qyRf2e40s#DPP-Y*k|i_I)r%cG zCPDcRH=s`|~$hVA5$s;~aOS5@74dHZ_w`?J6P zQkA9GZrymLJ528nj}FtebK)fKrMGwY+fE=qcGMm29^OfZ-CqChpy{f>7J;SryMz7* zX}js7hmlUx#Xy$cKYF+OUfRF2H%xoWNEOL2kxEhgSM+7;&5g|`MdTge#H#p1T|N=% z0sE9Nk~pc#m&EaWi&MdI;^hYdcz(w5@L`(Y2;jNI@u)VB{jC^j&HN%L9(sgBeox`d zw?fX(&m&nv41es=zQAx5f2c>WJ7sSi7&+IkIk_YAJz~8I;-Zo}<9_-g-8k9*?Bbix z*Vd^I_Ws!T?#A-C`B7_3J%8e>_18b{u3wJ-`H}k7=iZ=ut=pDY`?n7d1_y5sTTkD5 zrgi=1_RZGz-fk~FY;7Ifz1QD|&}px>S3B)?r?c95{@M%A$@v>1aZMVzNVbM^f!ymj zYs3@9O$Ro{xgcIwd`w>+#C^C$e8KXRm}IaC@kPrshMHL&xmdwiV$~~WCc6wPSIR!~ z(oh*OXOc8>`cQU|H+4lC$Tfj&l4G{`tx?bFQsi|R<&VSPl^6oCQf7BDIY!+|u+`un zd|}JxbJ0eB#?zm6VvP4?z7S8{KO!EO#s_)W(@5vY{Nztb&C)BBJMHozaVFt&q>IatKEYi z^Yf4|b@tWzwNlCxwIzrpSNhpq3iYeW%9Io1s?Y-`>Jd0b+M@~L1++M0Q5oM;?8T^* zBh)h)?SUM8IKzNb7Og8~@A)3Fjw^e?ylIjeWL#+bjEx63-9Pe-%2(_ z!Oq!x`EwedpdNRDcJwOr`8Yv;X8Mb#=>5rCXehpe=!YmL_JJ6C5b3Czd0keDWXx)IZF6US;V|icvN1OJ`bgy}MKhxQF zyRYd9c+T$6`Qq;QK3G3EKkVx%>YQ+fBDy;&$13k=U&w{~XnSO_D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..1f32f0408f3d15600cf92aa3e72fd9bee73c71cd GIT binary patch literal 532 zcmYk2%}T>S6opS_CMxZsFCZ9q3Q`j);!>@PE-F;px{aa{Bb7-16mb#o1>zfIZ6Cso zk07`bvgmU(p2@V*A%}bB-tW%6wMd3G}}$5eRp*e^qqS2@EG=JJh$prJ=gWTs<&S| z*u&%uux(UQJp+h8O$0W$UWo~yl4!4s*4*3lVku81TkvEGZx}iERxJPXB3AUQOZM^2 zX=&|{#EjMY~w4{te#=|I*DNwS;3>|w%rLhsFc;RR$S=<^)FA7+SQjsO4v literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..1f32f0408f3d15600cf92aa3e72fd9bee73c71cd GIT binary patch literal 532 zcmYk2%}T>S6opS_CMxZsFCZ9q3Q`j);!>@PE-F;px{aa{Bb7-16mb#o1>zfIZ6Cso zk07`bvgmU(p2@V*A%}bB-tW%6wMd3G}}$5eRp*e^qqS2@EG=JJh$prJ=gWTs<&S| z*u&%uux(UQJp+h8O$0W$UWo~yl4!4s*4*3lVku81TkvEGZx}iERxJPXB3AUQOZM^2 zX=&|{#EjMY~w4{te#=|I*DNwS;3>|w%rLhsFc;RR$S=<^)FA7+SQjsO4v literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..1f32f0408f3d15600cf92aa3e72fd9bee73c71cd GIT binary patch literal 532 zcmYk2%}T>S6opS_CMxZsFCZ9q3Q`j);!>@PE-F;px{aa{Bb7-16mb#o1>zfIZ6Cso zk07`bvgmU(p2@V*A%}bB-tW%6wMd3G}}$5eRp*e^qqS2@EG=JJh$prJ=gWTs<&S| z*u&%uux(UQJp+h8O$0W$UWo~yl4!4s*4*3lVku81TkvEGZx}iERxJPXB3AUQOZM^2 zX=&|{#EjMY~w4{te#=|I*DNwS;3>|w%rLhsFc;RR$S=<^)FA7+SQjsO4v literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..5ab510f69fcc83426b97c51e06bc37d06e1c2a07 GIT binary patch literal 4448 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 Ilcpl_56S4j+5i9m literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..73a4c5231fd00f9f27797547fefe97ff533f32fb GIT binary patch literal 780 zcmYjPJx?1!5PiFQXFH~FMMb2zgvPlO5u(Ec3JM~b7}8K&qF|ImAS0WPD5AJ1f8g>D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..73046f14321e5af84bbd9ca9e67403db9a0785f2 GIT binary patch literal 604 zcmY*WO-sW-6r9~ni&Ujo4}v)=NJ*$jZ=${QP(iH~Z=u*|BbG?N6i+$$1L{BM%|ri= z;7Q1#zoT(pnn+#p*m<+F^IqQGv>MjW;rExp_ShSB1`qzo>jwRyRs|?*lJj4^Vesa= zT3KXDV{a1pFBgOG(Nchg9SyTgmPrlu>(jGc0G|xu3^&Q~0nE7FGBm^%=rLryGBjP* zx%ZS4Z(z!h^{+R~=L&{*R`;^=yiaQL4ly^>S!=q<(5re5&V#!_I1KMc_Wsp@-DtL& zcB|Lv`UATj_Md|%0@tZH71wcGx8fdGYe$%00)-;VGuAtin)%w}FO+}?C{G2Gk5q;W z#CnaVCeHQLqa^PHnB({nLXXiqs8er48^Tt>8DjZ_m0Hsp)!gA#C=s8>YD*7N2o#YlYJrMD}cxz5L%>_%p^q&gmqsKbK2F18Y@0ETl#YsY! EU$nt&GXMYp literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..845601063f630a5403cddda5918593a3eb6b2cda GIT binary patch literal 6769 zcmcJU&u?8<5y$8KvY&rEKl|CP1gb>-t1j*9Jv)B>WGT&76?^Q?j0}jyWa)%AOq!9VGJsGA$Nzbw>~jDO|le7V!jjoat+yE!F$ z#XOjHc-Xha6Z7l9YWT3@_EQY9U2K&rMcod~etNOKNC5MDn%~bcWd6@z`sJ&?dE=$m zK7RbSuYtd_^rdGXKmOgbPk(a!Dww~Y>HqcFubbcg5q$cm%_crsSM!>5^jC3uc$$E^blL037hK+aB#cZy&3WXDNiP5ApG(I0bL69kD zdxeAcwC1E5q#n?5pE(x`;vgGM)Wd=}fP=$=IDmu0f;fO%4xMHpbD+Lhldn1N8`cC4 zd#ni@_E;0Rwdejlu3gz9W?kFbO}W7SSb2C_aEj^Co;dBXFV(9&1|w_trTSDOjwKK1 zEL3?IiSr`kne#}T!NGYX&fwrY5@&F5UKAcxc~Jjz4oh}(8nvL_C!IDA=xB~}B5q@G zSORAbV{rfnhq3h?2ZynIGTw6NG~T1u99F~u92{1}0o-!v zH!GO~^@G1z+iDh7Gf_{}o967b=TbU>tP>$?}b0N|3C7_c@yzD zeg;c+yY3A&oXWzw6 z*hUU#@SJVCzrgUqe{h-DHtU{7T}7RR@2IQrUGejJ#%?^95#zx4Ay@bzR>HgVq>&wa z9GJ6~eWQn6;+N_s)gSAoxAFWGHLbtIcAxklV-7OmeaXGPupRzc8ywK1?jt|34(-of z`E>t0XY1KWIQdV{-EAH+F7+2SUX&|zh~cdApuSr6_QcwJ|0gjI->iWcgNYkGfc0VH zbX`T=#2hejAy2`J^^dh)Y%nfeuZPn*u~%NC6MciaBWJ{t9MKQNd5Udu^t{0rnQ-YZ z*rt!*o4j$}&}Y>%PxM)E-Dkmdp9Smk`TBxET>P0l?D_j#9;a`EYkT0@9=NsFDfU=f zyhD!c&2oOR{ujMNu4zr=D$cJpaR3L0wZyq_Sku|Tc*~*dJw^Lz3J3h9^Q(PkC+6-W zpP}fiR?n*I;y|o}!@4+tgTuNwfFlm;;s9CVm$f?xgZX8 zE{H>&3*u1cf;iN<;G2UumE2;_pBr*+u?LPdVGkT@!X7x*#5arD9`9Clo_M#a^TfLq zIPCFm1#ay*pTZA&^>YjMz`+lD;MyLzwdd<8G3U8R@zDNd4)0;9e}UQ0^a$Piex^@^ z&Zz1=`CYE$DPzT@J!8{*j_=8G)MLzz5$3w$qDxA?^@WaziVL+T-yV;_S$z> z_~~nFdN0lV`m$HQ3+sETzj9BU%E^!N)&U3dXeb*ztN!Hp! zmgcs8vB#YBe09~IuaLnDIq!q`V6OJ)3BSk`lN0O6@jRi2EX_Tb62sseKIT;~A!8iB z^LEu`>3ep_Qtjk8dtB$mPxaQ-|Ac70mhbtVcs1YiE%6}V^BwWn^QrIao)dC&d~9a_ E23{kz{r~^~ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin new file mode 100644 index 0000000000000000000000000000000000000000..f571926e7128f65f97fe622c2ec3cdd955e5cd33 GIT binary patch literal 3676 zcmaJ^O=w(I6h7}~W?qtMCe*G}XqE~RCPbuNH9tjLs8t&Wgf2p8rY4Y(kfhpz;2T^? zB2=QdQl8M&L=aqx=(uvBtFB!%FrY%(RS|UI^ZU-d_q{ul>X1jzz2}_oeCM3|*OwPB z#XIMoxgJaXwQHAOS=w#i-o3TmZU%t_Qdw!=SYB@i0=c@ee0yzU^K=knP``8Qouzl% zYj3aawpY$TAIrqJM0x&Ceq9#coST1EL}oD0xfuU&EFX)!fVp)}0|c1z9_R7f#~0xX zB$Q7$f!{rRA&?346~6EA{i1V>C-N)4V|+euIXpZ>DvC}&{xk_FhUZN}au_HZ6UTVG zzaUb6ey+riU>{pvwEy|b_T1k3XFq)N`Gr}IcUF()zP)^=clv|L9>>|!U(de&(bDX3 z@2~GU9{z3ZEX^!6<<+$t+nYO^H+LtWyY~F#r7Me9CKp$iSK8Z?3!58TYwHlEn^VoH z>1K0!dTRQmnR747;Ts~AiZn7{UJyy~>2H?vRh>^~MIQ7p`y;*{=W9BjVXnvd-qO~G z&9f+VMS@hMao5OU8WeJrhJ_rbQ6X2-xR9$Ucv#5AE5x{~ShNe}xWM9=SojKF$eDA>%j%Jb!-}EH6^nL}$IJRJ;y@<<+{%nER;GVf{n3Bm8vnOYBaUl` z3w=gR)-h3=WAw}PXGCL&#v4Hl#IkZsOe-gdE!l|r2WbM#5q!iO1)iYa#54LZ9Uamm zcTXRm(8uUS>7P77|FF=Hg0GK1ruqEt>BDr)i%-3vKMsFX;uHFc`2II z&TGDPi~}!UoJeWii+4)(Wj=M(^wf|(^75^N&q;k*&$=Xqo_yFp*1s+X9XCe4`*rO9z3uD-qMrMs$R_2=PTAAxB=l+e!Yh14G z0S|lLaAOSSMQ+3;UwbYTbMxR!yV$E~g4nco`;yo=3yPX2aRWj+0q_Jyw>+!rIj zM?CBc(*yG1nj{C-lVfoC&vof+XwP2oj1%O5I;dO$Un%66=a03a+_E+aYG7m$%H|w2 z_lP+M8HaZP&u*T9tf#vhT>o)DMKOBG`@->eHatH)A7GfXls&G2Zv(uH96~nzu3`T) zY`<&Z)v*2Mc|5Lbtn4@M7I#MTzF{oOADp|HyMqM$%spx9%Qa!n`aENf#NilRG{^GJ zGJJ>E5o;ao{&6<0HHavs)F5ue78zhb8Agjm$ zd#P^$+62HM59%qiZ;n?WpCZm3n_mEbVLxEk(z;co2K&eR= z0)LHFkuhSS5BC(C?+*B~COXgBRV0F6|9`Q0UlZHnDmHtLcPM!OW_j~%^=GFhk1_v~ zA$s0U9-U-IJ^5#5w<82I_iv!qr;{t=Zb=9V7_73Yze~hwYvdyMJkmT$pJAKwETD~fGn#c4Va=Et_HCXa#;p$DimrzEe*t|?b6s?;%=0wQcsAmluV)YUW1fr1zi>v_1poj5 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin new file mode 100644 index 0000000000000000000000000000000000000000..b63c5230085cc6d0e5a71860d9f1c16232ef62c8 GIT binary patch literal 3512 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..b8876ee9611f8cfd7e10c7fa2b39fdd281058c6c GIT binary patch literal 432 zcmYjMO-sW-6rBCgLk0T>1as6&+@&I3wF(s~7Gu3e(TI^sBx$RNhd}>8ym|EAKb3>O zqj9!rA|P&8R2r0!M*Vfd@-C6k{xWrfNAJQaCp2ptZ^}g5Z2YoMizJH8TubaHS#Um1HeB)bVto7|t=lBrwU4Ekl#14tTBBB6D zE^YiH!jC|yC|p=b^l8KKX7}#olSlhz=FPmBkw5fzyz%xGZ4WDhAW(CX8qsjM?COnUJ zN|SF+lUze{H7-}GV`7-|=5kl#Xf+D(F8(|kj)%t=?dA6??Va8JZoB{G)6rnm-Wr~r z$EO5g&f zvDk4;fmLFvxK6wZn}pg0$4hDz_LF*rYe}QR_2dOHdmCzUo>``Fkn)E7wK%KzNcnO; z%b5x`jMwZA4Qd}`Qm@b;Kc_xyj<;qGMb5DIZ{{8|=_9jKi#@w3`)loLze^vDI=K(z z{noK0 i9cy6ZUasf9otJ-J*1Ma?{oF2P&T@;rjLe?qIe=#{#gB;q literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin new file mode 100644 index 0000000000000000000000000000000000000000..2ca8ce885286c6467fc885910e72aec45cf58151 GIT binary patch literal 468 zcmYjNO-sW-6r9~niqu2?fMAY#sRLUR_(qwuXij-M?BSol>i z%VJsVp>ut7yanKkkeX(aJ-&fYrV~PQf@A0t61RltEMi1R)I6y*L^)IT*6vss_N-cO zJ_*`^hx6!u98coMsk?Kv>vnsCo;!HDdkDvFCw_U2MkK!1@>;&<`F_hkXdmulaS7Nq zoJ>6GvCZo>fdp_;;p`=<;x@Ui)v3wXdTLg@)R>B^#IVkqp_b?TWeUTTZ|8F8A$z3E oJa?tZg&Woz^yW|G6jpqLd?LUR_(qwuXij-M?BSol>i z%VJsVp>ut7yanKkkeX(aJ-&fYrV~PQf@A0t61RltEMi1R)I6y*L^)IT*6vss_N-cO zJ_*`^hx6!u98coMsk?Kv>vnsCo;!HDdkDvFCw_U2MkK!1@>;&<`F_hkXdmulaS7Nq zoJ>6GvCZo>fdp_;;p`=<;x@Ui)v3wXdTLg@)R>B^#IVkqp_b?TWeUTTZ|8F8A$z3E oJa?tZg&Woz^yW|G6jpqLd?X2BmQ?WIj3A1YO^Qa~KS_2jUQn?jTd0q=9>wSq^}}B4{k%uOD_1Zo-Z-Y5VL{mJA47GV*QduxTS@A zUeUUo?W^6Wff-jCoSiswG4>HK%-IAf@pbQ&U4^wcYCf; zqOV8~iSkgRtg3KCG)Ao&p0dJ#XapJ!)!TA=M8xfBRBF|DB`a67WC70Q5U2Mm%c3OV zV;MZ;U~SQW_i37x%dTkP_z5ihR8r0sJ_DT%XKTa71(1kcJz{6qL-zF$+~0;be7W-V z%3{P6RCD0+L1-x_kmbl{7(PSFz;{^BpjL+GXv^@NrZV{JJ3y4IqN1J>9Z!MtwR!^e zfd?M(7K6%pS5K&sh=G*l@tJHv;`W-Da5ErG`dTJ^J(GSnCOm~!Cc-o*6JO0l*nnih zouGvYwm{kS@)_<+1PM-trcH)=B*ShGt|6k3r~ z=3STx>#30(`zzDi)`@8p*N0GL65EnvfjZE7RI5 zMre_Avscz+uVhSEWv2N>3wv6ez)&4QqW$5ryb|P|na5m0EmpXPjLq9b#Mro6R~EN9 z8J*uj>dNIwDEP|Y{DhbP7sp$^mkpmFaL5^Za$RKfCdvlRD~_}4(0dmyVvpl;akrl( V;axVJeM^%x!_{)6Q0HKp#(x+v*7g7Z literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/gles/chains/blurs/vs_smart-blur.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d62e84953e1a9df7f5136c3de137a25368ff72e GIT binary patch literal 1178 zcmai!O>ToQ5QRyVm3s*jHC*b6?VNyJlX56Bmxcu1LSV7d@OQmVh% zen($w#;)x!XGllP8Fcir0^RUsWmU_|bvSK^gKV3G^r5v@K8T(2(Ij9ED4VN`08pFF zt(_syGuT7f;hjMLfigZkj>TF;QWpcgws;K1&5SN9JIy>Tc<8>z>Nx>H=d6UYC)@a7 zG#=ZV9=Nr~YNV*FIwCOw*+wstl_gMqY-6GM)PkG-K8ohEs=GHxj>GxvT6F&;x>=K= xemR_fAzXmM1!q_WR|5qnftr~E#j;(1dV3~oz2qw(gNFOz*8z9UU*ww*>mNfrepLVf literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/supereagle/fs_eagle.bin b/bgfx/shaders/gles/chains/eagle/fs_eagle.bin similarity index 100% rename from bgfx/shaders/gles/chains/supereagle/fs_eagle.bin rename to bgfx/shaders/gles/chains/eagle/fs_eagle.bin diff --git a/bgfx/shaders/gles/chains/supereagle/vs_eagle.bin b/bgfx/shaders/gles/chains/eagle/vs_eagle.bin similarity index 100% rename from bgfx/shaders/gles/chains/supereagle/vs_eagle.bin rename to bgfx/shaders/gles/chains/eagle/vs_eagle.bin diff --git a/bgfx/shaders/gles/chains/hq2x/fs_hq2x.bin b/bgfx/shaders/gles/chains/hqx/fs_hq2x.bin similarity index 100% rename from bgfx/shaders/gles/chains/hq2x/fs_hq2x.bin rename to bgfx/shaders/gles/chains/hqx/fs_hq2x.bin diff --git a/bgfx/shaders/gles/chains/hq3x/fs_hq3x.bin b/bgfx/shaders/gles/chains/hqx/fs_hq3x.bin similarity index 100% rename from bgfx/shaders/gles/chains/hq3x/fs_hq3x.bin rename to bgfx/shaders/gles/chains/hqx/fs_hq3x.bin diff --git a/bgfx/shaders/gles/chains/hq4x/fs_hq4x.bin b/bgfx/shaders/gles/chains/hqx/fs_hq4x.bin similarity index 100% rename from bgfx/shaders/gles/chains/hq4x/fs_hq4x.bin rename to bgfx/shaders/gles/chains/hqx/fs_hq4x.bin diff --git a/bgfx/shaders/gles/chains/hq2x/vs_hq2x.bin b/bgfx/shaders/gles/chains/hqx/vs_hq2x.bin similarity index 100% rename from bgfx/shaders/gles/chains/hq2x/vs_hq2x.bin rename to bgfx/shaders/gles/chains/hqx/vs_hq2x.bin diff --git a/bgfx/shaders/gles/chains/hq3x/vs_hq3x.bin b/bgfx/shaders/gles/chains/hqx/vs_hq3x.bin similarity index 100% rename from bgfx/shaders/gles/chains/hq3x/vs_hq3x.bin rename to bgfx/shaders/gles/chains/hqx/vs_hq3x.bin diff --git a/bgfx/shaders/gles/chains/hq4x/vs_hq4x.bin b/bgfx/shaders/gles/chains/hqx/vs_hq4x.bin similarity index 100% rename from bgfx/shaders/gles/chains/hq4x/vs_hq4x.bin rename to bgfx/shaders/gles/chains/hqx/vs_hq4x.bin diff --git a/bgfx/shaders/gles/chains/super-4xbr-3d-4p/fs_blit.bin b/bgfx/shaders/gles/chains/super-4xbr-3d-4p/fs_blit.bin deleted file mode 100644 index 22e2f0c23d0e0e483f849e0e47fd609d34302edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYMRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/super-4xbr-3d-6p-smoother/fs_blit.bin b/bgfx/shaders/gles/chains/super-4xbr-3d-6p-smoother/fs_blit.bin deleted file mode 100644 index 22e2f0c23d0e0e483f849e0e47fd609d34302edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYMRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/supereagle/fs_blit.bin b/bgfx/shaders/gles/chains/supereagle/fs_blit.bin deleted file mode 100644 index fab8eaf63d2e31f33c7f5803b0981b085a826bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmZ<@_F$3e;Fo7)U@eX>Nv&XDWB{VG3=9lqiA9x}dFcunndun?3T3IuMhZZA=luMl z6l*RFNfU*#_~iVY{2~KuuF|~BwEUu6h2q5Af}GSMBNqj*(Li1KnJEgniJ5r{8k$_y zTnY*~`Q>1vO%zIU3xHfw@6L{vP`V4_QrUHkn52%0^qwOsr5nssn;!tvbxQ|e2vtA4%<(`v>pC-KLa++lOSp$jVGiz8 z{z$MBLNHmubEEl^pPzT{c7;_d7`VRYf5P1Jr*FJ&m|HooZd#n4qiv_l*tI`^Ss(qM U(^)-2UKRko(t|u#dzVuD0Sjh_6aWAK diff --git a/bgfx/shaders/gles/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/gles/chains/warp/fs_dilation-horizontal-fast.bin new file mode 100644 index 0000000000000000000000000000000000000000..734573098cc604d1f4b3a5f79fe57e78bb6e9747 GIT binary patch literal 433 zcma)&(Q3jl6oxCzn>@vTnYgaB;+^cuDeh_)K0pa=Rs%^>Vy#u#Ym7av$1=8n2to+q zod5ja`Lo)rpFWm9@1tm3szRD*6w&#nyOaK?>k3<4Z5wo|n4-&D)fdkBGM%%V{w(Nc zbGEPbr}Gv&X&a;b^bG@m2AwWprLMsRJ2Swz!vL6}wGG+kG>yM^a=X?#g)MSO8)RjL6KSj2{D zqU^$njiQ`D@#Oscq7=i4dlcnL^D@)&i*gk*GSf2(6v|SQO%#xHPQ1Oo9!aJox1cPs zDBj4LOF;p~)~hO4umx!}(lF37&`|&qnke!Wl|Xq7Lp=k14J4EGDk?R>>dHXwgt!N& f4rVIIgtGYL{G5E@A_Jg!BA8udV9iy_#l-*sj>1n4 delta 48 zcmaFIvY1&mEZBpEvH8RfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv1-noblend/fs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv1-noblend/fs_blit.bin deleted file mode 100644 index 22e2f0c23d0e0e483f849e0e47fd609d34302edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYMRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-3d/fs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-3d/fs_blit.bin deleted file mode 100644 index 22e2f0c23d0e0e483f849e0e47fd609d34302edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYMRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-3d/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-3d/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-accuracy-multipass/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-accuracy-multipass/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-deposterize/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-deposterize/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-fast/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-fast/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-multipass/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-multipass/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv2-noblend/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv2-noblend/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv3-multipass/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv3-multipass/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv3-noblend/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv3-noblend/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-lv3/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-lv3/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-mlv4-dilation/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-mlv4-dilation/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNRfbykznQ8e&xeCRJxdl0?MMf?PVAFvb^D|QvauYN26f`us zs<{*ta`MZerkCUv0F8||v<8a8*b24^KvPRfi&B9`Xn@VoLAFT~q&Ph%-mNGx-5KOI Spau=NW-Yjjf$D0xxEKI9`Arc3 diff --git a/bgfx/shaders/gles/chains/xbr-mlv4-multipass/vs_blit.bin b/bgfx/shaders/gles/chains/xbr-mlv4-multipass/vs_blit.bin deleted file mode 100644 index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 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 Z7mKr#)%4==a2o%i!_|MUL--hYv&y7K@4 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/gles/chains/xbr/fs_xbr-lv3.bin new file mode 100644 index 0000000000000000000000000000000000000000..e2d807898a8e1a52ef0eec33e049ac7df068fbad GIT binary patch literal 10312 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/gles/chains/xbr/vs_xbr-lv2-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd851ddde0a2858404cd9ac3ff76a0a5f3cd063a GIT binary patch literal 2087 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..d76f98203890b2b36c36ebe7a25e01956fd5438e GIT binary patch literal 10045 zcmb_iOH(5^5GGs6g=`1Z1cRhzg2gO+q(z#d48qUXPkGnUT?04AC7C|R*V-t)p)H6Q* zaQt|`xLI#jYCBs!Eaw~jha$-0Kmf)n0U#(|FRs;UwzyZ>;P}h2Qp@!d0ch02Vm}3F z{G*%YdbU%S%lZBF6abMEcT+$>KDfG?Ld^2X<>eHjlutJE?Gyr2GG)8f10-q+@hHXL z)kk%+nO*I&Oe9pD$SCst^I#ygTb7;(O%u=r6|sBV%mJQ^@Hv%LkUu{)YdIHM&U>`z zRxJgTVF;@j_UJMBzQvn@a^m4Bie5c!Q5BR$)}wp%ytMg4$!9&LM~`jChf0R^*d9G) zyB;bu)>HQA8Rh$z=ByV~ovdfnqi3AxS|t*g^^=Pb4D*@D-_rZ8HYB8ZUV-%Sz&Wi>QkjBc`+WHsxr4@_&LmnqP>#P693PA zXdOMKb6-Vl``pLeDdRgK$~Y`KWGr`2lyMk!%CuFumYu7ya|3qgZ^ll`Hr7Q_7Dh@@-w=PQdt&W{!ERBp6urqJRPSTey`>`vlIF$X^0p2MNWj}TW2!z!#_buvHQ`ui{gBP&nJ~1CLe-U=Zc2!!A~qFb3yqfV7y9Pth7YK=a>-m~f#B>|dL$Ps6Jcrc7D5B2p~=*c$%hLet^mqSJVdLnre4(uC|UP8xZTWW zyZHv&$-~p;xgPf0aCPK>;UqTzm=3T(%NVZCo$6gF zf)TH=As!J1mWB-DfNWP&lE%@ld+3R(0~>M~s)}Mb3Dgkyg<@$gfqwkBOCx?oiED86 z6U=j8z10-(xA%urRW;(wa;RYs#XGOV4W|hNW@xIzR_m`1G_?m!M&$CkXo)4gNJn|5 zE23vjUp=i6Ikmoa08YoIbv(WKbeZ(TDjUL+h@akPy&ca3?O9%yVPzy}S_35zTNI~9jSi2C*U~yq`mj0}pNi2bI0V0j;`26`#?l(}uJx)0CD8bEtieM} z^Hrgd=SL$Cv#@szhZlX`A}vp?W{jIn_L;;TXC?vq1v7&+9P}Tw5t8kVOM`?Snx&Ft zh%}{cGT*h6Vg3k=Tbt||E$n@Q1m=R6+ONr`XaPzdtPLHk+kmRGL?zyI+ZS9pRh^jD zP@)=p16FZiYJf=~@p!&lf*u3fT>~#Gm=e3piqoiD05Hz~t-~*any~JYmCWgaqQYno=53 zoKS|{oUol`t?=3*%_L>k6Eqn4RTU#}4y1hs&REjYO-E=K_=!tt0y)8hZy%9X*>w{= zD~6%?@U5koRp`_$>lzPUcH$(4#sNhJ-Ye8V-4lUv<80Yk6V~B!8A>0V4m0qITAc2k z7sSO8isqEd`x}dq99-lOnt<0cU;s-DH5a!vuPST=i%^19NU$w|*H+H*KE`4$eVsx! z;FgHNvldjc-s=@_ zGY&w(YI~}Zu}K_*!l(?wdqHmt_A>ygr$ zjJ`@)h_x;o{inY$@UMrF3!LAza2o|AJRrfM)u4l0En(M;N%tZ2ms;ozOHfHQi^12z zZ;}u3l=P<&KHbF597fG8RPFO6rD*XHLh)+_2?(n2lEot}#;2Rs-pm za^Wp4r1B%K9awcN=yo_^H6Vw0EH0k5q<`_aS^tVe9FC!=`*u0~w3*%hzFw|3V3E~< KGhdI7kNyWA^z}mk literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin new file mode 100644 index 0000000000000000000000000000000000000000..3bc5c076820a7b823c33c17813630155c002e2e9 GIT binary patch literal 9859 zcmb_iOK%%D5O#z1;{JqQcq&$otcs77WCZD@ZP0s*UW`JJZP^hZTdpK0wuAil&I~!^ zaG$b~qEMtI=k?9Z$H)4^Uw?kToBeeD=IDp3<>g|1^xYBs|Kr1azkHnUR?o}v8+!83 z&qqg}7Tc%Q-HrOVy7_poJ}obe`h@c?H=FI%_}y`B+=+4BGj4juZO^#t883UrCq3iS zcgGKRtLx47R_zwI_v_`>{H_SHG!TJtN&pCoH>)dkyI9?+VsQNBSgG~qGXZGT{pxWJ z(1b_V>&;@XF4oJtt2qE7C+_EffP8RyIft0#lZ%TvL@A$am%BLxrew9-^>%T&FA9-Rbt0n}Jw6QvQoCd6nb0%?O;8d0hwT#JDF~mTtb)$}=>UnPShmy~FY>yt-jt`X#>v27L z%62_eXsoB~(K8u6J~wAwQ+2YQNspdsrssCCk2R=eIqT{9_+M1zD_vF=3~4cxm&^3r z$gvFa>A96-S#u^YWGiUwg@QwyLN@_px6JW6@q&Xqo?K zA+(MjGow&NZ2K(4+$j?}A<1|wI%FJoPm=K%b;`6=xRIS}uyZ4JXRpT2$Tl`QD~qhf zVJxeQidI(@>|0pJ{zPe)G!oc&f+WrPTdXEKi{ zGf<~t^+4sYR6uTdTyC}{#_RmDLJ^E?KWYRB34OkGzH9VIj zXOZN-6-MJx3F{>VOqtNZ&^5 zErqo>?i2KG)gmwT&gDlj=7WoZ5Y1iY1s#CQago`r>3 zw}txr(G%EVGi1k6lVJ?r*9fVekx$7QJV5io#{o)P$R>ylL&FxufqKY`80#TIX2Nz6 zoMwp%IFx2&skfA(dU*MKJ!1mCQ9>cECvhN_|%P9il#exX>JOQ0V=?$U&xE^!U6 zeu8=KtJj(W{to_ds;Wl3Sq?Ssp?K$YxZym3zzj`w*lPXdf#&w0$%tHD7A>)45a}q- zd_@eb8LFo>BCj^o4#4Tzw2o&mpD&YvSY<;55((4$theKNpgqUSGOUaQO>3Y8VoO7` z8LK2O?g4s@y*#dpsmbAS@mgBv$q-ft<5Mwu1&83*P<+7#(^y`E!L?r1padG9jx~6Q zX}&77^89G!VHWm|@$h2KTBPNv)lPA<$v%^~=gcg?uwWLjhJ*ftHbSz!acPjyL$g$p z43Xy4P3F6HGRz;5ach$Uqs6^Xl)zjNQ-?L#>K35n!P?Tnx(%p0OH|^`w|&u-q3Xo6 zh7#4-E3irnQv*x_A)kc|9NPkpyojg6@PrMg5fVt-YD#HB zaYh;TbK-WEwZdzMJd>2!K+s_17o{iQ97u-@oU){&n~vBn@DrEP403`8-##L(vgEdUkhTc5;9Qy23I)ZMaAV;AiqO7Q`Pz&64@#@#fjex_AK)gc> zYG8ej6>4WfrJcxq24*E;{lEwGLLPp`SLbBkznEt)iWYCBZf*es1fVN?d;yk>Tm4S7lM~TO58-txKdKi0%26- z;=6K3Z|?mIQ{N5!&nV(_)_ zo8)6WCH-kcNH?)Fhf#A2Rfl{@DO!AlQ2JT{Lb})rMT6A}9G@HDXaa=xGUzk@Cv`wY zH0wy=(cgIlP()RGU0Ip>N6nHII7Nw|R27}f-wu3)nox4|4}H{nqLh2F((lE9p@`Fl z-i0AkAJGfbH7A{*|px-dYzrFB|+^pvxwu_tJHtWq6MB?0c K$6t?+kNyW58^y{1 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..d43108803f4a5ce3d09a26a2fd0e6e5fa85cb97b GIT binary patch literal 10981 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 C<2tth literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..ca0c4c91c71cc7586abfea359af0fe8dc44c1362 GIT binary patch literal 10663 zcmcIqOK%%D5O$09;{JqQcq&$jz14ELdZ1`8eW3UDW)yrSm#1M7BRy&hP11MAJe`ea~z z`osB$``dS$?VZ^z?;h5xt^LIiWN{$?sLY83Q#Ku zwhJ8`<>9fLO9gQi6spDpd~81-0+|h~ssTQA`P8Qmc}4ixK|Z~9kspOmJ;>*|Pakr> z@NoltTt7Y(G{UDD;M4T;p->Y(lL0=H^69z9?-ZZHXF9-Vn((<>?n4w-I-slB)%Y)D zxSb3(#Mw< z@s}Hpiz<&L$2oGu$B^y^O7|#dFfJO=t&N>7Sr$uHz|OrKJ6*r*WEi_9$6+#z9pIhf zFd4?K5*!4(3D=$Dc=xmotIMm!@*1$4yc|1SYi(9*6K7?$Hc=+6wYqKs%Os_esV1gW zLZVBpJ-O7XL5|_Bsn&Kp*Tt#E;&i=+@z4}S0dtEng)i;p_`+OP@e{s|0B2@CD-R>w z{o3R-iUi3MnkS?gnM>{-$Q*iw$f35uPmofLQ8kWH;&0ITRraGU$H3LAV&Qwxv#v;_ zZ$}+iP>t(&u8UlaMee`CXk0eXFUe^7dI{f;U_^WTMh`4}AB}oI!r3l>RBMpvM?XmQ zageAucYvf5q{eFYUx7sU1b84m(CX;aS(yhCV2XPvlHl`LB;mjrKx#Bd^rIi7MuF6- z?6oe!H4c$Jjn=E(?$7s2I7a#4lq54|`DRy$9?(WFC9`ZbLP0UNj%|fXj;9&gKZ0cR zQZkCFgiX&%!u+^|_Wtq!azqTtag=0egV!}cTFptPC=DKgbbH%-+C-Yge73{Dx?g_@iBA1+5h_Y zhvhn8YU>M$4nY%1sZI}U_VGa~z6x*$pAmspn4g0Z6POGQCWupb6R@kZ`T(#=j6jDTqyedwPm{ofm!%Ck75LPnn|&u^s2 zV-j*itUBmQ@nBkII1-0k=h<@X0GvKV+jz40wDh!M#?Eyq!4mM&z&TMKG)vw&B#J=n zNr*mSne#$j{U7YgL`_e(i(>@s%YuW=IuaukjGnDZTxx)ttnb)(G5|lhg3ehz= zNR^&#;n@DH@49PQa{3hL^c7V_M5+glkx6227KG^pVlH+oMCj{~a zdXPySpD^PNy=Z~H8-IP{<>*i%=kLS-IcQ%RK1}l&%LheKOlc60%0QJD#XvRyRp5yR z&dWrg#yRq81aeMJ_M77HB=EqMmOepv=W_K1Dc_rF0>@aOW|S|3LUgnYx#Vit9W+!i zfp2`U=8EnvYF5EL62~9DDN?&CcK|`9gOC;6Tooz*Yqw z2TE%QaC!)EI0S?n4Q2zAK?vV^u2|MnJ)xlc`Q;}tf$Io-ATLSb33Ua!`bs{MQW35P zo$j~}J8sfc)VUT)CR9sSwS8&~xYrY`3}GL6nujntyd@u8!EWDSN(plZ^}_r_7cJ(y z?}AKteBj5U?D?}iADK^-aycAyzmiU4yxNaF0ER(7@~xaA_RSuH=~@ z_>V`$@Y})rHeUlMGN6I*9ix1M{ znhj|nY&?Zlvw@b?QnM$Fdjh$ocSi1er_wnwQ!C?OglH+#P7Rtz5U+%G+(8>Lq?h;d zW*WPq*Qcd>H-+*MPzY&`e9)^4`-4zvr2+l6!L6*8GJ+;&GUHMLD(*bugdwHAAUUI(GRc1Vd^9c&FQh z4BF@f1R;~H7c;nVcg9NR3ND9OYmsKYdTiwllDEA@BMUC!e+iFq+07$jPygVAb4b-8 z&#R>%K9DQQNIu2ME4MTTCJ=-cJHN6ktb1m5d2C<9%)s6&Tzxzo;!VeZAm#^_S7 zIsK-Owzu>o+2ADkuz55EVZ>9iEn#An58pX+2#HCXw;muH93ZKUlK?WOTR>>!&GbU% zM(WoY1P!qlsd3uS17ZX3TR<)hQiz1a3LWp@G0(H4kgUzZ*}ygQ2VbDIzqVdG-mDkD WZI?GcZ`PYFuoiZp%;)p-vwr|$iJ#;E literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/gles/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin new file mode 100644 index 0000000000000000000000000000000000000000..4363644e3a5192bf93a8a62bca28af1bd5532caf GIT binary patch literal 12528 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 L1lGPBA0Pb-7nST+ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/gles/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd851ddde0a2858404cd9ac3ff76a0a5f3cd063a GIT binary patch literal 2087 zcmai#OK+nv6oqM3X(Z++bmJxI!-JjhQq}z|D~&XpSsw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOiz|s}-DzuqSq_i2*bfzuhWq4AKuXQGA zoSCZX%|5r!zmMIU@84eS(zo-g$?H|V%*x5t1fKuiOePOmeJr+XbXTnJ?$JZO4AH}) z$q&n_s#oNCIyfF!#;IjIw2ViV@z^q+Tu=Ag;gHsb*j2;MU=OJ%b*_$46It*<_9O z0$j8gI`@BC90kgeOoGmd&4l8Eh^An5TZ%rY<12RgJQux3mWd!S5R913ruR9H zG0Zugy^~@1m$)145yb8ZKDrW3KuAv8ZZI6E~Fx~#7ST052s8k91olGI%|O~6m7OCr-r55) zZwD+PzaDw(Wsv(KZfV>bR9!3u2cCJ+0@(m9>0G1gOogi#z|nNoe726vNcBAGjze?m zL$j{)tjTNEAtasl&T4B&rQo3`EK%6u?Jh0xb|;eQb~j#Ap+>uJksIl ghc*d+9K_9u@Ql{w;-=2lpR2N}jWO`{cRHQ?2kPP@zW@LL literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..df193d6dc4156b0d46d14e40288826f624172f0e GIT binary patch literal 26226 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 U+}+;YBXV60rpx)?r%#{!AA*lkE&u=k literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..736852f06b31e709ca712c04c5cb19942c4e69f2 GIT binary patch literal 7804 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 vYT6LxUw@w~2ML=L+llR}|9fYjEDy8T zQIt5@o!2)%W|xN_-`{K}?`Joox65>qt{eQhl-KpVwF)*f_X|oqh&jePm-o8$y?@Jl$@8J|%GQ!gNB&vaICymVbu7L_HJqL7uab z&Gy;o4jDFrZb5~7H{IUlIC5dnsq&7)Uia#GG)=HCvpa);XH#W|yZk`t_Rjx zQ1cycE|qmd>{8gul1pn)L@HTj2kjbUR7(>?AyTAWW2p&3)#KQaAw$YGLP%lPXCNdF z?Gg=cG@{kNMg!nl$n;L7!jd!@NQhj)8vb+Ebt+*+vLjM$Z#|NtAt;)yyHIvm)mk0V zPQx7QmQtumqJgc|BhIxl@M}*dyLdYY%iA}919A^AvzNtAJ(rlk`wbo86W4PPj6Jx& z(;rQ{qqGy@KnpCP$sH5DId7ucSa*5{Ed|D;AO+YhgNXtmocHOC3bM7I2BAjs z_$Br*G^Z{!?eSDUOsFQRaV=AJP#;4oH_b*&_)F>ZJsuSk?)4%Z@(L0tg8J(Zrtd%U zsNiBmAF1>L%O`~CPWxp8dw6l=I;8jKb-K*V!Z literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..7f285bb36d9094e97a49c684a41b7d8e2a12ab64 GIT binary patch literal 5435 zcmbVQO>g5i5Ou#U-X8k{c$8X46)DNGv1l)Cx9zDw+gnf=Y9c!V{E^yDVtcXwa)F-u zOM2 z!~S7gw_m+_!2f5v=2WL2)24sF7z`e(?Xg)e#9gzvyBCl3jS`Qz?`E^v-lngI-g?f~ z+}!w*Cv^# zro5JHh4WlqE4IR+mDd?tAqKqkPuS@bI6Bg2mry?-nLLttk`-zs)FhGRcqED>FX7)b zNm)Vhc&5zb)QN{Dbn3+8uJCx=6&??*c=1ROc300bWf4vPS40qdX7V5%wMpN3&3e9>NlH0=+3qvq z=LAWViEagE9STo;EtE-@c9uNZD9p~BBSIKRo~Z|E{fMiMnA|GYMaAVNQEwU*xedTM z`EZIL9Oi)GD9+*Fa*!z17jPVX9AgJZn+xC+xe0?A_rbt65_vzRq`g2&xq{@>f;Neg z$|IQ>li7^k@eR$2pZMu2SWwv~xoVpymZQ0x9)X3j2&o zJ1-0jQz_0l)6x_l#|jH{RUJ_3t?By*3Y?Gd zxS}U^`4PC#i!dv$Bu2_I=-=zCpq#KFM!vaM*~>^;PB3`k;d&rwbQB>|)p&!WVk zML0Cd^uth+HOvPPZe*sm+@L$-%*SMn#0xu5u(eIA?K*H^cO6kQADX!x&Z>k` z|F*r8iMIs8%$m+Bqy8;~V~1VOwd?Lq8Mb(x!vZfXc&`%Tov4?)S|1YJJZ76)8`E}i zl1c5;twcUtA%EYaa zIg#79GMgatVGO&Z`&Kl;JhJgyaH^c&PSegV&(> z#0;FG@-mMj+IZH;oXA7+pa$wi5Na&}>s&Wd&mOOuZk^zkE~K0_R41h8#Kn!ACd1lH zcS6Q$+@kEU5#H_O#HiNL$|=^=JyU#CSXNx{(?HkNa(;KurSs!JJJs}&u;%>S!7r+? zMn4eXNQ~%yU>?r6RHiC&YPrTSc6pq?-HUB5+dCb+$A^CDi1B6J&T*N-zh|xqIW-=0 zP2v!Z;DfO3XIx_1S+)?N~+M-ifR9%JVP&jazLYIr>?9H}Xe79L{ NwpId&;oWdJ_z$Ek3qJq= literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..4421f9fd736f108e20b804609e08766895366299 GIT binary patch literal 4663 zcmb_gO^@S55DkdE1UT>y`slD3ue;m%(u%zR3!IRE+Xz`ElVmI<@!(`8AFKV5NJyOc zFH}``yUSlm4va<_+ui;As$RXW&b%-m8bjJYDxb>A~+8KmYR656OOU z+&>o!^XT(uyia!7c@cd|lh_k!o_q;&(qgsPClA?XXP*7_Rj>Dw7N=~x5|7#H@kzWa z=1ROE+C0yThv;p;F&?vVd1YL^?LTj`WnOH=F5Nt>7lryxP%Lc&JTO0A5{m^3^U637 zb1$y0_bCACdG;VSX|@%?p#PyS#5zAbiRC&^_hNHQ0K-0ltY}dzb_v8Ic&7H7C&*8t z@v*xW--uFyQF1TOBi`7?7;YkhOqkXUH``v{tYY0~_52ro!W) z9c;|N#06jY;r5uxdUv$x4`;bYBWEV_>uU=y$|3B6DeG_mYk9JkRbG z8{yPu_nM7R2B_YkxXQOnFkD$lGJ=-}_U$vMAeSkuxSKpGzudSi~SkE zyO^zMH{^bf24Lv(K)eP`M@&<*FJ+0Oa&tstk!_cGB7Ne`JQpK(nnbJFy~&NolqKb= z$AX0iABdYd;f#<5<<5%91nD2U0Q$HnySG$6-!cjhxWU7O!BAYAdWN|)m34v&A>Q4! z1VWqiC<6KjY>h+1AvW_hoWa51fguO8`k*$ z42vQv1A=V8_4TkIDoBkD%R-c?L!(Vx;*fw(D+is)C;~Mv3a1G|^{wjJOK*V(PI9=I2w*`;Y96Lw@D4lFMN)6OQ#U3Vt!uNO3Dr%r~CcXgbp&)C{AW?X(fSzlh zbeg^Z>Y;ohApAoGwBwtS=1p2-lg90*?D$$i>6sF{@Fj!oWXecN-;4pwg@_vB85SkL z@6l`s>It7_OMlMLcnp76E`}Lkn-5fpO<-99w?Ll|`eO_J8Ss(F1z>dvm?CKdK3oUZ wB`^W_L!QePKd|VSdO8>rqbO%!G9iiOe;`)tw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOiz5g{XTRmEkh;+;68!G&3Qz9b|m%R;rZB|08m!{~fmG z!5MR_^BJvj@hXd~Jv>Xw2>M=*Ws}`$3GJm=LY9aeya|1$;D#u(Ez-vb0bsw`VGsAZ zL+<&^pF+U=$v{^P>V1DqHCkS6;(6OB%3e z+T+;oJHYcN#@M<1HcRNthD;rByw8Q<+*~2kv2ML~l(S~2>QZ`58}~s1&E-58L~0ti zvHQa_c#(q_v1VBN5nja95Kp;y5!2Z^JT=5KwGHqT-eHFq87KRm(Wn1)J}4zW+6pJ@ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd851ddde0a2858404cd9ac3ff76a0a5f3cd063a GIT binary patch literal 2087 zcmai#OK+nv6oqM3X(Z++bmJxI!-JjhQq}z|D~&XpSsw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOiz5g{XTRmEkh;+;68!G&3Qz9b|m%R;rZB|08m!{~fmG z!5MR_^BJvj@hXd~Jv>Xw2>M=*Ws}`$3GJm=LY9aeya|1$;D#u(Ez-vb0bsw`VGsAZ zL+<&^pF+U=$v{^P>V1DqHCkS6;(6OB%3e z+T+;oJHYcN#@M<1HcRNthD;rByw8Q<+*~2kv2ML~l(S~2>QZ`58}~s1&E-58L~0ti zvHQa_c#(q_v1VBN5nja95Kp;y5!2Z^JT=5KwGHqT-eHFq87KRm(Wn1)J}4zW+6pJ@ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..e19250609ee3757c3bd29147ff0f0cb3152a609b GIT binary patch literal 911 zcmaizK~IA)7=}CDss4%Y$aGdH+!pU1mza1n1UKAj23;7iGULBA@#KH;Yo$=;7H_0) zzqil(wmdyPjK8N}pBIEyaV^sQypV6>5g{XTRmEkh;+;68!G&3Qz9b|m%R;rZB|08m!{~fmG z!5MR_^BJvj@hXd~Jv>Xw2>M=*Ws}`$3GJm=LY9aeya|1$;D#u(Ez-vb0bsw`VGsAZ zL+<&^pF+U=$v{^P>V1DqHCkS6;(6OB%3e z+T+;oJHYcN#@M<1HcRNthD;rByw8Q<+*~2kv2ML~l(S~2>QZ`58}~s1&E-58L~0ti zvHQa_c#(q_v1VBN5nja95Kp;y5!2Z^JT=5KwGHqT-eHFq87KRm(Wn1)J}4zW+6pJ@ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..4582d6f5e1b3e3a57469b1672779822e635a2765 GIT binary patch literal 12646 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/gles/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd851ddde0a2858404cd9ac3ff76a0a5f3cd063a GIT binary patch literal 2087 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 VW`6VIdbQpFW>@dc;LBie_8+vg=7j(N literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin new file mode 100644 index 0000000000000000000000000000000000000000..97b44e39b569d1d8727233ce976b2cdad69657a1 GIT binary patch literal 6336 zcmbtY+j84B5LIt4YCoWlcq9{96)5WBN&J*HZJsjIet?FNWJfcS>7iv?a>g_LjC^i( z7g%sXf|Me8JQPUmVh;`$2bcH%{qyt3zrKF>sq@QXInUOeA3E^=+sA)D{5{()ciV?z zX+Hh>fbX;W)$>ySNJjtv-swDM#eQ{rqdu>0KHsUw2io0LBO0DxJ3ou(OiW$VV z->%nrwpDk#S>irHKT@^6%Zh9>8{$_NB~jbW9dv4z;%6?aD|NrRxs9UhBAag`s8K2s zJg8R^Tz|KZ!6a4}L|8QFk9rCoaU6TGQf_}FVvYLGPY@272FC$94#>@78A0n%&&a$6 z9r&?ma17QFn*-3uz@M*SMBwGZ)%Eu=RI_D&7gOw>(f|N^{7Q~2pp4aP<+tU0_utVF zkX7Nubz>sBF=_9{Nufi1IF%3A4a!54a~9N8bYlwLSmaw65i|E-LPRq0dxGQvi~we8 zq|^Rzl=M_G?d!?7r$+sB0f1tln8fqlGCzRo!vYNsaY@D<4RH2sOpxjqvAGYH;mqQfsm4{QIpRH zLDQ-k#OfMWDXxZYU#ThTp87&G^CAwb;xnKDxg16*Wylzx@F0a$wEi2o**1!@Pxof& zf_2=seF@7ohe>F`gBASkl{#Rmt*KFBrOf7|zk^tjowd02z{Qf6Tu4obMPEhMS)A4% z*Z6jO%+43JT;DG(6&_JAG*@aOh=NqM`yEM@CYFe>lByQ6O1ePQOTLDN1l;rZj5XL> z(!ic+^N2g#aom6jrcPqoBTp%hKFTv>g!2poh6psd2I?$x4UKVlgZYM)EjfqPbr!=e zjz*72$IQt&h!_OB#|=k?&I+NFk06g8pJS32en`J_S_Og#mKR3a+sZ5Nj8I^mHg_U(M}TQk-!3lFOEi z1h?XZMCfi6NpO&{p&BO%ZL&EA{?>V^Y8YEvLWCUKg;3GPo8y?@IZ;<3lGK*{U@zy~3R zK+`6^8s5CuVZ(;46?Vxq9tSGGafqZI`aut{jmAt$pl!_3mbRO#xJ@LQ%Z-%0G_}K? zm|t9O$cBbC*bAo;mxIY4^k)y03N8occfgmeQU17G)2*7HwbUr%>{Zd=iVu6>62xV1 z4e{(N8%%Z(OP@2h1^S`Kr#xSCh(sP06S@H89cKzB6LHB0SAK8Z4Wn790cm7Q(r`zK z#!}_3=n^^*;*?=R#yr9K1D+Cj6R^Wn@^ZdzMJD)gc$^J>6(k{4`FadqBC{1Qj+JY5 z-;CI^+wC1}=PNI26N>A4+!K0#CJ`B%%R(rxe+VP;F!^1E5FrnV4xSN$k z-v1?-uDtbfe8F}Q;-=BXnB+C^1CsZLvC(kx26=QDkzc2z-GBvJ;22>w$14{ gl$U`+IpqlE&3g8}$Zp={>%0J@cCgXurQ7X%1N7iMX#fBK literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin new file mode 100644 index 0000000000000000000000000000000000000000..8b8020487b82554047ff935949575e9bde9a7f2d GIT binary patch literal 8035 zcmd5>+in{-5Os_6MQzbfC?8j?t!R1C1ws1KHf^2)v>zaBZP^hZS+1`^c4i9JM%pu3`{{HjThu{Bu|LWqKo9T5nzxe8c{(bl1ulIjU*3-@U z(`xEpefx=@Cy%q;H2qozeNS())!lS0Fa5h8e!RGN%2wOi{hj(ayZiW{o~GAYJ@MS@ z<#Kh?f77Xbx9~lE)A@8iyIrmp>M>h9%%>~;n-XMA9}s5syw%AiDq+Nqz=`@P+> zm@HkW3!7t@JdRA>Y-Mu3+>l1m=9a4@Se9$Azv%Z|x7lYYWo8i)bXqD=&$pDOe&@q|w}m@T z`)A#Hnx49M$>Vy=Q_1FH?WW=5r{;56-F12!$I^GBis@l$878 zl?Z^%o+y*La9Q&ow|gI{{DPzfgw|5m3sh2=145_$qZqAqBtiu*D>D!#9m^OL70sd& zPhPGt4H;u1cw!l2Vos zUU4xfC<7W~ATT78nNv*xib+6V0dmEcf3XHW&PU^}&PHj}Ac=~0y@1sC;k zl#WSJ-3){&rbim}NVn@zgwiMKk&fw+K|M00J5lR~r0s}%25VDQZH0d-bzWjf|ls2eChIQynls2eB22`lvqCJYzG_yHE zbu$&EO-zpr>XB*Jqh?Ceq-H!p&HGmN}s4lCUzY$C~yt?~2}T_(+-L#Tc%| zbg+hgAq|tO0XKuFQ|2yPnnxB_uzfiwX8%0GotHazIT43FG7N}lJOje{nTsU3%QY?CcX(-X2<+Lv!TH6tojo-W^(*Lww}Q6#Nrber{R0xc-(Tw0PLC zeAtloZywgv@ycb?HHDHNeX>-?7fQg&AS$(GrEW7Qd6XOU{pdPER9wr7+hWjAo1sLw ziy%a`w5*nm2L0btxPcwE=JvY)KILPr0Q!2M8vuZPJHLK7wIZr@&!E6r7C0<2=o=#jqkK-pBG$|?ha7V?j=6Tf1RQe#$LJ~W zOPph_nPUz)=Jq+}4j>CS<^qneZpOQ&=3KiZ2D(EtDd literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/chains/xbr-hybrid/vs_blit.bin b/bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin similarity index 65% rename from bgfx/shaders/gles/chains/xbr-hybrid/vs_blit.bin rename to bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin index 9dd618de8a02bb855e0ba2f88983419191ff7d0b..1f70fb1d7da97f86bdda6dc91e76222f3ecc9eda 100644 GIT binary patch delta 170 zcmZ3?JfB4`EZBp^-*tv369ZRid|75{c|cKq77HT-10w@>X?#g)MSO8)RjL6KSmf*(%lrR diff --git a/bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/gles/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd851ddde0a2858404cd9ac3ff76a0a5f3cd063a GIT binary patch literal 2087 zcmai#OK+nv6oqM3X(Z++bmJxI!-JjhQq}z|D~&XpSsw`^_=D{dH~Gr?_D0=S#+a-&|SNmG$)$=V=)q**SHu<&%G3EGxSYCWgZm<&AMU_7+dIfeZfa&R5a_bpHIwi(>(nwQYr zoRQ*EZPsf5JG+LJ-XPDY#lM*Z_IB$%EQA5gde2ID_UNdMbuB%7R(t5I9u^)rj}*H~ zK8mXg0f|_oT_jwVV9tGeOizUM$kK%cvS73AhhD|o71@xxm4)R16;0N@Bf@@OeCAt$h1YkO|{sebJN8Artcmoj& zgEPGC5V!rXwj1E=AU0!T2>aF{T+h-*$H{JVrleS-p#O!;M+jBi-i0aBi-cwFr+y&e}8T(8vs#xHd&(F*9#kJYL&B_DL!E0pN7v6aWAK delta 48 zcmdnNx|mruEZBpEvH8UM$kK%cvS73AhhD|o71@xxm4)R16;0N@Bf@@OeCAt$h1YkO|{sebJN8Artcmoj& zgEPGC5V!rXwj1E=AU0!T2>aF{T+h-*$H{JVrleS-p#O!;M+jBi-i0aBi-cwFr+y&e}8T(8vs#xHd&(F*9#kJYL&B_DL!E0pN7v6aWAK delta 48 zcmdnNx|mruEZBpEvH8t7%goNqZ)g6y_oLybe^-D1oLL`N@zVNW;s5#QTl{uxms`Q!GCmTt~1 zYctMv)5Qcf$zuqcc%5t?(=>bXukCk!5%2yIT-z^;>2sRRVKtsFXGtb*0pqJ>3c~Zi zz0&Cu%*WFOIIjI>gG?lVyBHIo&mpYmOH3ukxKMqDuYj4ZU$O*4I2hxK=k9G^-MTv_ zSGflU_uZ*`$lODN`~K9u%iOz-?n0M*kGb~@?nUxQP#Wg!dfs-omwV6w6pMYfY2UD^ zrlbLLA2hlLx{@O19vR#<=izslzuz%zpwbUYBtA7*fx?%p#t$pU;lSW?Y226mT&6SVT z8%6_1!O$FiGmU;b8Zw1O8l**>Mo&wFG)Gk?Wv78gsG}j3j?utzGSG<3G@^DiWC~3* z1W6;OG0@QvB!CqSVUR$)mri;^NZnO5gm0pO7AE09lQzOZDKyfkG`bKD(b3X4mQi7l zQPhM}8pkp!j53NAMjGv8RG4H`)MZo%EsbLt6$Tj{=x7|Ps4%K1S{P}xQ&FK)Q8pK% z(#-s^gq=*+D^!;ZH9cIG_kFI9xy>ciY)LMZZQdbd->RH-?_Z&h_5ov z?{M|KxW)2VE_{K=W49=O@(KQs6g}@1=hyf6QwkTcvvIk2flp@feKwwaPiJX{tK|&g JJ_p;j{sRpUsrdi^ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/glsl/chains/blurs/vs_smart-blur.bin new file mode 100644 index 0000000000000000000000000000000000000000..c034943e2503289754eb0223e5d337d577943ee8 GIT binary patch literal 1082 zcmaKrL2iRE5JgFpMMW>+C23QaIEGEseV36cb&F_1BUcHIh#`=w2dR3XUaMn+u?Y=3 zG=Jv%&9`}dd7k{ve!jkqO4r3yFXPzH8324U83WRSpo|RU} zRb{bs^OU{wY>)P_pvWX(1hu7=1ekHQfqs@EZ|Z)!s74q2129K`fsp>j=M#F8GVy%u z&(IwE(~e$Npqr#{SxI@ji&jl`AbW-i-L=-r$I3N6Ug z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/super-4xbr-3d-6p-smoother/fs_blit.bin b/bgfx/shaders/glsl/chains/super-4xbr-3d-6p-smoother/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/supereagle/fs_blit.bin b/bgfx/shaders/glsl/chains/supereagle/fs_blit.bin deleted file mode 100644 index 3104b9e54b2cef3a255336c28d41370594691c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmZ<@_F$3e;Fo7)U@eX>Nv&XDWB{Tm3=9lqiA9x}dFcvesmVqPKpE%!{Gt?VE+kBrhIh|{a7k(+C%9VJTXpCvhqcc!SiesT7D5KDZzz;D&X*qlZHUx6K3MDZ6Lu*1R zszXG1qGx3w8GI2(kLK-L=hIllO;zX**KsWfE!#kZybMp6B z4hf&Td8=UCtjTEfb-j1jLJ;zNA1Zdx2CzS|cftPi_k@wI;Y^c^~rpQ040uhEgu Iw>>y#FDRUMng9R* diff --git a/bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.bin new file mode 100644 index 0000000000000000000000000000000000000000..f5c958c3a244606d9efb6a012735dc7a26086494 GIT binary patch literal 416 zcma)&&5FV>6oo73CQoseiPqAJJ8|U?x|)R#P(m9^p=nBNYjv2V@8ILkt;kG31R;cQ z@44T(C)>kr__ew32i_=Ei7dQ5awi2QAOnE+@i_VU2!l{y?BF7z2~vqC_SO15ary~Th(2Xj#9J$~ Pl_`v+l>eXd!X?#g)MSO8)RjL6KScHLT zqHME7Sz=LTW?s5NS!%M0LK#R+a(;eMis8h0(h{Y4nQ8e&xez%d{S&vZss|}A$t?hC zk2kXBQh>Ads>&5?K{|{y4D<|i6o7;#ihM;SP+r4O&p=-T$wjjBqspXA=^+E TpPZkQUt|CjPK=+N%g6%&42MhT delta 68 zcmdnQ@{>t6EZBpEvH8*2iO(K diff --git a/bgfx/shaders/glsl/chains/xbr-hybrid/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-hybrid/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv1-noblend/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv1-noblend/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-3d/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-3d/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-3d/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-3d/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-multipass/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-multipass/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-multipass/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-multipass/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-smart-blur/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-accuracy-smart-blur/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-deposterize/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-deposterize/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-deposterize/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-deposterize/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-fast/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-fast/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-fast/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-fast/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-multipass/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-multipass/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-multipass/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-multipass/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-noblend/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-noblend/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv2-noblend/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv2-noblend/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv3-multipass/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv3-multipass/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv3-multipass/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv3-multipass/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv3-noblend/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv3-noblend/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv3-noblend/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv3-noblend/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-lv3/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv3/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-lv3/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-lv3/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-mlv4-dilation/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-mlv4-dilation/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-mlv4-dilation/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-mlv4-dilation/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr-mlv4-multipass/fs_blit.bin b/bgfx/shaders/glsl/chains/xbr-mlv4-multipass/fs_blit.bin deleted file mode 100644 index db0fe2b487b6c8f1624a7136f8c83734c2b7dcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ<@_F!Rb{`8QMfwefkB(;KpkpYNiF)%QcB^Fg?=A|o?r6!vwl*K3K=j0a|SaTr> z8v%uZT9Whgi&B6xrFofY`9--3#fiBEIjKcPE(%~1fm-r2QxtL&GxHQQG`Xs|6co~P r;@yf8)15&^D%dJ$01YWAElLII&;V=EK{i-ZK?`oZrZrbB7Z(Enmi{^a diff --git a/bgfx/shaders/glsl/chains/xbr-mlv4-multipass/vs_blit.bin b/bgfx/shaders/glsl/chains/xbr-mlv4-multipass/vs_blit.bin deleted file mode 100644 index af6c9349f410fcc16eaa87e32ee35a9d92bb026b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..f404bb3847ca7813867197c0b2cb4264fc965ca8 GIT binary patch literal 6880 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 s#=_6%i;ceycF6Vc%(#*Yo zGCQ6wKpFi1<=dT|chlAF{NhZ!n;k3h4rd=Pm#dTV(JmXQ*obT$QLQ7ob);$?sar>e ztt0!7cCRkxr_0qj##0FnVP+_TGBe(Qv@wH08%8dt=WiFYm3k@&XYh16KN08C`Gx59 zci-;{bWDr4^BXk*B!xI#ET?Pn*J5^Yq9%Y~m>?$rTQosV04|!K#QOX#EYJi{68^LJ zUYxF`$Ln5?Eu?rLn5V_fZNG1oR89~8^-6}I1W2&HTFoGc9z`)=%dd*t>qG(I?iK8B zP@s#ORKbWT7;RLL@nFmpj5jK{OFfXlcprl-H>ju_3g^?chf&gk+J%wwP5CEkG3&%3 zh9Sv@ICwCm*ih`0e52VIMNBMr79D$nLqs4qtihWe&xqm%{sBEuNv|x_csvkgQIGcV zP09-2O2ZbXL!l1$MS`sRtcep58pKsMURg9cnPrzH$QYP9Wh|M3jKQx%rg8)fG6vU9 znH*(!^2wS*Q*}cVv0)eyg=c~sMnq{0aiTPaI8SIO;z>j}Ojp06!)~`DE2GUTy5B^4 zWaH^TS{4l!jBG}9$PBTn@$?sB-LqlcBnOECDW9xg6*#??B&H$yhfhMuD z4K&6MXN}@zR#BPtt|!n$f^Iwa6)$U;)xADe$*rYvY*DD5x(zWB~<86%v^Uiy8K9SF3+ z5>i#1FEx1T@(N;vFS;nfzKKx5XTPtg8hz`hEsLTO8iC2nn!>X7$sDmy2d=9N%mCCoxMBn%7^^tnkM zmZLPQAR#>Us-2eE}jHD6ls)3Ob}q$}0DTxu+r zS^OAshEIS`gbBmX;R{fB6r;IujU)UF>GlXfz_Ja$JczCM@dg=UWBAdRcKmc3e!Pv= zR7YtGSj;XjU;jOY$4a{~*d0QM>0g&Uw}f&Z>Z;w0WNiw)fUSXKx~4*Vf=`Mx5BCyO zYK6S+x_~)%!GNL|uv}Y#j+w+%6}$a}B!M|dAe%CRNYM#Q6_A!m_TA1MU6 z;ZVX1-Uc2E?RK+`cHT@9sSH9dSsZdi7jOv#*&y2Fn~*+EQMPIF4ws?!j_ zxVQk}LYNxjk^`N2XKlblzY;A%aP|h~JXs`@Ogm)F4;eJIlr5`F)*4~8-~dxy@!cNN z6e7&9kHd&098ufgVaON@DQoycg63x*u(gJ#jw%)8XCIonOt-snNnNwHLk&|kyzSO> zz>rll}sCGFNTpd<9?oSYKJWWOzQEwthm zpsvM?+Rg%T#8z8vo+#0ns{s}7#49?J$iqNzZUI9;K#px8{vQ!&bBLFn^ZreX{&xmEGLzM^9grv%pKp_Q05{UDgD+6(%SOYhW}+dcZ|L4RSiw z1Bo0aj0`*j-;hC>38V0whUX&l(||w)HzMM(Icpd1$ucaWb~seD(KSR=BI55ZD%=Zg zfMYl@yhD3Jd=Rt6<;?2OPL?H`ZG_;O3T~l-KIaQvSHW!*8-Y`Gl!?qVqP%THX|KB6 zV$gntu0~?8=OtpneY&l(H!Q*Xh8w8U8woBma6rHWEbwM74%xev4f-~VZWMto?lKWX zOH8{Gx|sx@6AjVOU7HCX4~Okiqnc+ z;5gpXooEV61CY#Y28DIl++Bw}s;n;*INV{gk*c7;BP)$4Q-bq2Yie{5^hgXI)-x=! z-q&<_o5_mE4b+(th%&+kOe+r8^&zm}RyOE-$&Dg_=e$e=QRvj%pqokXInfXe^D~O3 zt0>e=D5{GQ^_weSGZ(W!*y@|iO4g}exNsci7?+A@N`M_4Ef%%gX*rQ#~=o^Zf zH&Hb;QCTg(c&i1HnzWd|RdLu*UlO^;pEzsWn)xFDxfdGj+IB)-8%+02VGYC$ogjRp zvtBoKSeQGw*d5xSB6p}PJ0Yy@UGBg+2rj3aPLGBT*&2Lj?u=r0M%JCkHq}H<^12p} zeP32XZ);mIXAlcCYA|Y`Yr~n literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..d8d081a91d0e9ba37bf5e9c943e85bc186436141 GIT binary patch literal 1937 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..df01409e7ea7657106ffdd0448b4ad1f2f5b21d3 GIT binary patch literal 9714 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 Sw%hLZV3;TmQ2cgzdGTLo+heTD zr}{A*uCQ4wsF~@m*H@3O?)K0B{Kp?3SAV(w;o?spcQ@Pp#UC!<|381-9CuHf$J>|P z;s^TjuDZDRwmm%G-hVdVb~o01!x=XZ4~LJ7cb96!sgY)M#Ey=%qa$u~q#GUSM@N?L zF2CO2etJ0EnaAzjm;LTwe=-EYFaU-+qo4q054Ru9-S+n0RI|%pE)8PQnlHCcb_2!^ zugwN5H0IO(VS6+m_PhI!b_140Uz!bA#3aWJ*uc*>Hyco!Up{=;fTr|f&GGIFAiY`P z2YEK{&8Nfm=2%tABj$}(yMB6}&6tT3!nIOuEwUiY*pjB1VA0l31uY0?VPPj(lnf!q2#a=-#Y;g8@}#hE6D(X23km>X(M_=E ziYzE>ghfBWqOYG`a;H+T35(?fi>0u*+a5z;H99<-)%D`v$i+u)95buyMvq0ou)4N- zEW&qn-Rd!NAEl~D(XriNa91+2g3Q3FRpaWmvvXrtb+hc}rmNi&UKjPkr;4`7>PWW> zw&+B@*qUR6#R84D^dt>O_dw$jI6>niBL*6e%t@L;{928@#Y7au?BZ33>8!Lij)7z> zih*P-ih*P-iUAtaF<^C4TTJR;k$sg#Is&bmjseIGUnj&jZaM~3&Sbzdz?p28CYGnIq#Jbe_ei|`AIkvu^MywI*1+kv%$!V1Hs&93% zv{)xK@A+U^+M!Jkpx@|OD7fyS2;nX43QsIog=t9$C zp}E;Z_hqW8f@Z>)3MW@hy_lOT^$U+PK$IP}s-I^#`>jc76bX_?G*3t~Ggn;yQ3ObP&QD*ax-5GDZvkV7we4J@L(oK0D#a6%eSDCLZvx!G zXT;(2VYfZ*4j82@R^bE{pNl$6){ga-16HsXrDdVRGS(!&V5}(nT2YV_?1xEFJdu|k zS+LF*jDTqyedwPn{kIz$%d^;FLPnn}&rhVtV-j-2P<7Ci;=#Dea3oH-&a>s%0XTh# z=6JIBxb$Q(W7oQrU{O)H4R)&=eOQWzcF%W>sHBwBR(JI63YTrs zlqh|rjLhO1S@}+~U}7HhI;pW&(}2V5#I>;gd*@2QCh@20yi|=)XS2y51sBh-j06hw z0M%!%@~zFm)tio%HXUOaS# z1~`a|84$yqf!-iF+#ucIAw2&)N&oA!1~-suk@XxA1!)QWH0eD2_%IAOx7D!5MboI3 zv=!|GWLKAj%`*T+qcwiB{Lj&zr;@Ri~1F7J*= z1K12KsgEA?fFdnAfmpz(!o3LWXo)~|W8}sG!!>!;Pa1k3K?cr~q8K2Ta`6Qze>F`H zn@*r+{I7ySv=I!M;aZp-H1wfG(BLfy7EjUL4VpD@oWlW!7bj{~0~ZEbE$4F#u3B)C zVB?V@0dEa*pllhC@#7-dOHfqu>}x5ZcCr$2dU(M-^!t8CYL~7JB7&xN?Vc2j&3Fc?i{Zt+=&I-AtgX=>ib0 z`+y6a8iX%!B{+PEgzF{I;gWc_g%U?U0vU)OIuDE95WUuF0D?n}EY%3#bHLRl+*N`E z3J*FElOJ-!?Wdt-ad0MLe)I<)<`+r~q!P$Fvdox>1nNja67CE;x-;a9A<7a&#+YBt zZvVJr0p;0LV0gCw6YO9VL>UFWcphpQ(nMk+ouQ~^I!A`mYKW>vWQzjXpg!Gh$}Jd{ z2(Ndd2Qn24G=+i(D1X*!PxuW*UceIkDo(buqNIIB9ce4xt z)oih%0703G)+9wWJZ3;BC5upuqaV3+RevwQkpM!Si3cQuq)a}ThXsKB?Hi%NrXnn5 z$^=doA*facPNZ-Vp6`PiA=vnV{?HHbg@5&McIil=h%$=Woiosr+@LFV4kld;%B4fk zR#>q`!H&S(TTjUN8qFgP&Khwn%Ah1*^8ASmrG*~75|Nd2NA$sdfS-N;A>N7fK&B;% zC~Mec3JUMMKq5?wW^=wI0wWtrRWr#HTE$V%%>2CI;v~_H{wYJLb|$Vsnle>XKcoD} zyswljLcvwEAUc5~U-(eFC>p4V!LRsVL|$4q{WJjudmeuFovt_#rzMUWr&P(~Cxr;X z*9@FU;UYY=wkE8YC;g$H2n5|}b=Ya$-9od&rn%*u3)nogQQ2;()BRFM{Zh^X!kt+_ zPG>B7z1!}wGr_J_v`BZk-70T&d%Z{Qu`ZtE0Ec<#FhC;ooW0&8_ZHTk_t>@KG)4nH z;^rcTs9S~Jxm(Zuzd4g$SPbZ)><#TIygjRi6<+=Q$&c^l3}5777=|vlhYm-RLDlkG d0kY)te)IET`}uDV`-cN)C>+41UoS5&{s-Q~D2o69 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin new file mode 100644 index 0000000000000000000000000000000000000000..286f94e019c5c7e0416a1b6360aee71ae8e9e900 GIT binary patch literal 9866 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 bCGWPYSG)DQ-)^=yJJ3)#fK8u|kB|NXhCZ*R literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..42788a3d40ceddd5e75168833d6c1442934d9014 GIT binary patch literal 10306 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..4e2d34708129d2d87a3d7f3bf24566c1964a310f GIT binary patch literal 24877 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..9483a864100a369e93fcd9e4b5fec5577b7149df GIT binary patch literal 7419 zcmb_h-ELb&5DutZ5O@SG&gC&AuFwA2Rs|B27LbsTS}wS=ti&mnoVaz8#!l5I;&qU? z;$4{8J$v?B@0>UnRF!j%cV>3}zM0we%hx|Y`S;|Xzn>g^cD^{9uZ})BqW@q1_Uf0P zW;cuN&Fy9pzWV%+A70H~KmY#M7oU2PFK&5#cD=k`jKVj6eRXv7e!kf)uijMe7iX$^ z&lG3t_2zu^>=;%ItTeqV>e=z_)$(G!xvZ||mv2{#jry_jI!X(ua9SrdOw}pA_dOUu zO01XX)#ZG7Rn>#z562Z-V5*zTx1{%sl&rev>f5SrhNGu-CwI7|e}e%NAr~3YaVh5F z#d?qbXZWUOy>;?a_r;esNwdmkmEp(d#s#YDQ66F#*dYAU&@()oXO+lG?HCYkTWGY z6ekY6kNGKl(&K=_*5;TV?grI2ZIXB@AZ50UR!FyoK-T43GopQhIdK%NU2c;-rPGjt|mFvX>@3#z06!8#6ZI!Xp!V43Yy%Pnix?N5CAF|K?Q_Q z!}vL%!md=oW-0{dlP5XVWIZhCK@=W&5IK*a+))UIhSAV!nLNHLBR7^JH_4Qx&Apzb z9B|tN)QyCQs)k{e+~y=rgvd=rP1ql;08n9Cs-O^H$^$HvVUXatLK=^UW#otpkQC{< z$d!7i5$Lg;sXff85_1YMr$o%%7yeR8h#WDavb6bLI#@sh&h#EPQ_FOw~eL9?O~4iLY3+SfC>WUG-6I?nCm2DDwL5UE_4Q0 zOEpfBi-sgUG-9qTKN?3sodLm-tZ!n|A;CP(aYy5B>}zZkf%BmD17W-3(%$2e4e_jL zO5o;5a#gKHVTue}#a(nTtr-v5?)Yuv<;FMdBUNi6>Dr|ZBv}{G2wlz4t?Q^WT5TS% z8lk5ddYy!{cYti>EF2ECJ7_frfkf|F9ppx6(4o{Cn79Ew&?C94BT7Hfk@GmJFZ>Pf%V20>yxNMg36Scf`;RvQF{q2l{+ zh7*MlYm=dXXt;~y8Qzj)TO+tkfX?;1%}ss2zDf3L4P&|*oOGyCVQg)UBz~?w0>1-( z3;gXwo%mU4fqx486X2ih@6Vnq`Hf2arb+zt?8`!)2Z(vokNJo405NZRFfZf*V%{9Y zJW)t_kYS!^ggg*1ZxHjQAM+2?cY~NWJ(w@+yFtvGgP11@$?6RAL?c)&VBR9;Z9nE8 zsP7grZ+kEw9FD-Vh&|996p@ahy0X4o z1O}bQ4^%p$kgN_fcDoDhrj0p7;3WN@s1Vbk?LwN6(%=^9VxTGUR!+UM;S#fB$oS_2S*_eATsWqr0ka zogfRbZyEcS^KDi8kGehPk!CazR@K>xZZj$6>e|0n^yoL@<8cb0f zr2ownZ$)QBFzApe!`=4ozO$#5z|Qbikub@gz_f1^y zGVY!%H_!CO14Pbb(qej|Q)R|(~{(NV~=#) zBg=a4V6t{FS<|!NNbH`@kCk2ak=`9VEsaRMj>I;UWT?g~MjyC{?)s z5JAr=oG2tmhKV3<8175*Gm67oqezI&#c^{H9La?w(z}$BE;TFNt$Q>tFJSC3)pzuJ zQ24RSQLnB(_(~JMVZ@WMI{b#=i!3(kazbTBpE#T8Y1{+HG8?4zj?l1tvAHq$$NJE@%Z@YKigwZy8r+H literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..e07c6914544eabe68acd89994d0d77f2ff0eb4c4 GIT binary patch literal 3855 zcmbuB%Wl&^6oyj?Hd*ijY-VW}V?4IUNmQ`{D)z98P-GG}L~`QdBqa&rt$6^>T#h}y zjvK0~O*H5Fo!`fE|K;qu=9jF`1_#F@5_| zef`p4D6vXBeF0O(C%})bG}-UJ{)pji30sE{%d+C{d-)l@sV=7EExslrTiDs;4KWyk zMnQ4Xnwz%;j$E+0l+kI}8@_4oo*@e+5m`dl13tVqte&sz)45C%iljFDKyeP~>AUHv zrE4cpccDI3*MUG*Q&va4UIcY>1ZHT6de~)$Pd|@wTF&0V z(IYpMU$3bcz90K+s2*#0DIIG8<=Puo)L`tYwL|y-= z^}AKJg|Jmgch}bwytR&X`L?a U^LYIsOS2pT;oKngpYeF~5AQ#NkN^Mx literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..81460e54d9d369997d03c11042fdd2a57227413c GIT binary patch literal 4079 zcmbVPO>f#j5G7K3;nE+_%N*^*b-lLNfTEt-M!mN;R3R4}iUc?{Bn7Je%l@FwetP}I z8lot{+L?JXZ{CcThp%5=?Z$7XH-p!UY@V(MHv|0r_hvA7NsHrZyM&i)9>dFQpB?6T zUM$G{u;V1`Jc&9_;?5J=d6IOVjP8fe+tp)UY+#pep4M3rega+=y5y?`Y|_;h9C!F< z2&}FMR@=vXh9&XG81|bdEN+ICfc^|00Bher7a0a~cr?%8Bl3^GU1q;Y_c{O;tOG>T z;JYP8sA5R`Xi97@k$(`d+9kBP#0`|l<`VfQfx<-~p|EGVxEL#QR0?p*#p00Ik7(#Y zIQGdX@qqgA2pTY@( zaP17#T}Y_1>!3hnQ)WkkvlP_L6=7~i@n-AHy3zg?=4-q?Vb28xTo2oP|M}N*x-NU~ zsn#prl>E+`^5%1f(Oglib;Y5UMV9Wff~l_xDS%2`p6f*}iD)hg`c8nOmTdu8#wDf@ z79;5*zeK2B6b`&6ym)c%G^R~WmPQoXmX3-uHjp-aHbFWHUdgyb`y^g<#5)^L*9KRi z3FoyBQq?DvqX)ndIbgYlT8NQa!d_Z!Mc-Y13H5-eo2a<{`v+Wmi+r!OO(@>**%lo8 zfd{xb@Gi^#)cuaiPmW3@4XIrRJ+W;qOR+w(QX^a!E~a{JS1}>;eV~SjL!X&EB|s(I zhN%#U7L2lIAgq<@y+tvxKGdArsA*1iwMM4Aa^tBKJUGW86M^BQw(5oKlyYqnQ*t6z zbO{}dD@~sHeSqL#BS$DH^Ula_qKrDVfrUWfJ>xubLQ1(7jekri_{BB~$>cdL&zs#EJ!i`hJueQ~X;~EI z3g1tAR{Y+Tpm!zgT_L?IQSVB8KRxa?k43pf`*i!1XQlrMv9HckcPywJ}6(E>< z-wiQ*8AId`=GX)Y+!If$AifC_wz32!NZ?+07G?sG3N%yAh0vKLOF*~GEEW#kfcOsb z6BoykgNPf(@YQoYyTug9tb&m-Oo@U-PGV-tZ!ksXBbcg_OXfzV!Y-!3sj9h1V~SkE z6qs8Div?3{yT*c$t`**Q*9vb>ThaASw8V+lMSM*cGcDN6tascHZ)VmTOC^LwW@f!3 z_jG2?R1l-yL>8tqg*~l1>}g!huHg!^!6a(J*vuAbvW8N=8`cMD)fFeaW7lCi)%Qh+g@r)DvI`eJ?j z;$SRewRrjf#)K+Bm#sY8@4x*_;b{p|2O-O{(jR;N8NP`w67)_!CL^2ev(X(gYy^*j z!t9>rb?NlJVgD^!=5Tug%>@O_5WC{=`PVVcEAbtv zy(CWhZ*VJ9pJf40u>{~JmSJ6H=^-nr>*|?!{3;zon;t^R%7UBkxVY5T4YNyQ zD{W44=MocmJ)t8!aXkmY*n^8W{nNyqB~GYcD_gk$3$<=o2WL{oxwp%31e1}2JE&$qKFW|hx|qj+1gK&P>_7+5_=pqmo94BZYc!=!K0dfX r(R*sg!14)UUex~Cpa;Aaa&OW|>wNK0rt6PIUX&0>>ISL*PN$RqID`md literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..bfcb3e7b1a54d153b5b0ee317a7e5e880a262087 GIT binary patch literal 5195 zcmbVQO^@3)5Ou#UPLKToJW8!s6)DNG5ww@KX?rTr_O>VtbywaBu-B>V-PjKDF9YP% z|I(QuDGo(uV+05cugQ6Q^YLcLy!hjn&;Ogfd;8hsi`(|5*-So}z`rkl`~BCSSBLg^ zc<5XG)3XQsd$sS*ZT=~3diK?1^4RpJ?*2|Zwl_*V;*Oi$uD{KnPuWVzR^)qE)br`X zeYf8ATd{ApFE?$keiXzhw!jIxb)ZoSMidU)b+=;MboU}jr?00%Gd*ly0>2fI5yE~K z--&hK+#HgG`60gMaM|&crf5Uw7(?JafG7YlQ3LV`CpqImK%g;B!ElPpa8!1D72uQ% zr@R#B6yj72r@9p99OBFw&ipbQY5m$ZhtejfW;peA{ue^&H1Z78*OIO9nAX>dt#DTL zb-`B1Z=T=Wnws?{!!gT$gYO1A4zP~uymY(fl9 z_R7(=J4;Rh563{+j7x_ju7*gIBtf4L7mq~s7(#>?VR8TY6;SaN-%_u&^x| zU9(YfnJAQr3tJsy5@rspSQ%p&Y{V>pqoDE#1uiW`($aH@pn~FAK!kv$R-g4kdK4&g z3zxYF56O6RD>c%b3N@#==2TR3=OA9Hh-40oy?Cjy<}3~iTSRk;YfgEZ1H^IIfJr2C zBh48m7!L!$C`2@;xaO3nxdDOVObrMqL^2m@4)$5i4JeF<)*PwKW}lBrh1Iuhj;L9! zVB79t90+mOx6PsL|NN)9|LNa{W+SkF!$`|29ANNqMW5J}X8>Uqp|@X2?C|;%zEXoX zx2o)fjhyXeThYMVdrZ?5n4|#DSuTJj5u_8}%MynS@h~j&k7G&JFdnSCS2!wgWLb}p zCDDW+nB-kTkRah6U<38hVKhLPkAY^KVB~_zFE9#kFci~GyWg|4H-GOF3ivSWa#v)~ zaB)0io@U|$JI}CHXOv1E&KfQain@Kbb`w?AP}|?@tCDza6FwLe)QyGkOt6vpCd0j^ zz=my-R^g2T?>s`h5$$H*8vN+yIoqsltd?*lneUp72gbcCsBe$R)}Zk*S?K1k4>EO^gh$hb4A4E!#1;A_+AzCax~#2HeM(_vNW|u zWMie|8BuS;WP4#*L@UrH4O^i7?j_Cl(}jf@cm)(>8E36UHq1PKM=GFp7?6*(4BxOc zZ80##yP#hVxMgspWbM&&X|_A#7Luqt*eM=^-+_A+60X@kiFYohiWdgWmSg{akm8HjO<NBzBeXm?eA~et(EO;DGrL~Eor0cZ kj+nwK8Vb3DN`cD{Lf&mwFZ$;0huvn^yGln6Z>H19|I|OQJOBUy literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..0e1d66c1644585480e7ba3d80451f159f43f4b7a GIT binary patch literal 4455 zcmb_fO^@S55X~a?5|#u1ppOol@w&U6FRkDLEO0^sZX*<#OlGi@Ocp0I`B?40T!|C^ zg;&+xcKKs6IWQW{#P06rSM}<-D(`;#>GOYw|9pDcdwH{5WUJnb9)4f_^6Sq(&Ueeh z?x9$^TVFiT^?aM3mdR(lN!-!y&X?Ge6?e@iCTfbi|3-i5V=3NUijA|V;QYFH9as@QP!@`*= zJW$-^H)@^b_bM9nKlGKlU2U?RS|8>(s3=;iisg0=&U|ImZv7q+&n?{upVc?&w#XK{ zC=!`bUrU1V;W!w0kTe`j1xN}IuNKk~$*_kqtpwD>83~-xWjH22>{~cvfiu1o=h()X z2%O2KIHxwwRNzc6!_gtGb+#+>JQFyx>*NoDaxzK5tq&brT+<6+P*N|`I z2zcBWF=i36 zRhf(lr?yT=R=OqwdP0o&Mzxrn+DxXMOay?SFzuiqt*d9xQ=p3QGKO$xH3}~IuGpe( z9y7rspBwgYrJP|C))Hl;GYmPSrQ8t(STC`yc*($W|)K z{@g}rv8rsW+EfYFNxY{QGByl`>bb2a?B%WPLCwm>Yc;s6vxAEGPvi?2y@81=Rv2pG z*~sw%GwLU3^wdqR#9w^mhT;dx_(+Yz?M3@Q=ivkV@rqs@)O^C;!+@CL=XJP;26{Xk z(fF?XTtTPZ(-?vW3g{mJszM5q{fHkA<9$| z0yXs_Kd+EHT*vlt*WY(g3ZX z(h4R)%~w}w0S!=|RL_7`P)JztMiQTDpr-~X&$wqmE2t_F2!CG#ZGTs>vgKN8x%9p% zTemeRI9FI_27dACGEPYT@(HjI9mz*SCS{+#rHUm~5#7yitAWANi2QAN7&~B=4_tq3 zU|j-tKpzSEV+Z~T_(bFkusH|Jk#qs?p9i)jFauC}%UI?3VN-6{a3Tc|Qi(D6NZqsi Yet)-`zbmr4?>4JVA@T~OkNtk{KR5gQkN^Mx literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..d8d081a91d0e9ba37bf5e9c943e85bc186436141 GIT binary patch literal 1937 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 E0t|H>Qvd(} literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..e288d693dbcf8bf421c995e5550286f87392f9d8 GIT binary patch literal 16257 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin new file mode 100644 index 0000000000000000000000000000000000000000..09fe6dd9e27275b297c62c1d8ec9c0018d6b3e82 GIT binary patch literal 10241 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 Dop>@o literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin new file mode 100644 index 0000000000000000000000000000000000000000..9310fb7efe71883012e510e16283725465d14913 GIT binary patch literal 6079 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 VXP~cvq(HBtva(WBb8-x$EC5sFG4}uf delta 46 zcmaFK{F6y0EZBpEvH8=MsWag C5)e}W diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin new file mode 100644 index 0000000000000000000000000000000000000000..d8d081a91d0e9ba37bf5e9c943e85bc186436141 GIT binary patch literal 1937 zcmai#OHbo46omsq8Y%pQ*?5@_gC};Im(c84A|cIY7Evex8MQS^(~uPL-??@kcIw34 zwLaI^pU*vR|2^Jc?c<;SFCF)gRxJN`DEQmeh2vZ}*N3#s>vYeKxqm5F(jShKm1V)6 z4rPw2e7!C|Sc34*_pD@mcOp@cpzoUV;u*G8S<$fFYul|Fx@pT4RhA8X zD`K?j6*{XdXO-2g63i;$tP2(9Tnh35NA-`_Yhi*n7dx{GE8d}Rfn*Xv- z?<|Z@QqjH~tRASS=m{i$pfPM{a|9rt8fH$MH8rE(-b(rp1fRC!X&KF?ewRcOguWX{YIWdZeA}#2+u3-o_ z{ndiDT)d#}d`QoL8&2Sc*oGU<;f4}dyX7gU9Me2#Xn;bP2ha#NtYO6y{>4_5*g)yV5=;NOFEV_JQRL6U7#oa<#+XbnCRWB|jxlK?c_xv8 zoi;IOiT+xMFHavoAy^clG#*2(X8?-C<1-@Ic?zToQ5QQC-m3xUpZf|%$v@MW&5A}P)hy)4i(A5 delta 47 zcmeyy@{>t6EZBpEvH8ToQ5QQC-m3xUpZf|%$v@MW&5A}P)hy)4i(A5 delta 47 zcmeyy@{>t6EZBpEvH8X&Cu(VWW@skE`!rMprlAK9k=Rqxf#Hv7t0yy2)#2 z7J#PMvF#_GJ%iiZIB_0adlrnxEtrG>{<|45t>pyBXMsL5 zfBxh|Hnk@E8!pJw(lCo5a%enAnz#iTRmyZ)wP%LZcw_mj>w1>Vf;1*J8Fwmjb!x?5 zDdSsGe5+Rc7iIje6u(;|J}cqVlj8Sk#n1U*n=w$zyk{&|FFeOu*ZWe|eyyx(Y6B_$ zpho;o3ALdVe^@JiPHl~k*_INR?OGYu2z9c)m~<4=CYiip&Rwi&a@XKpX58mZ6o>0B z483gGq{BO#g2sR7XzF=HV+rS}`WUhd8cQ8cPS9o3epO<>(n}m(N*u6KokTd(ovbF( zf?N$uE(bd{JuEg|_%QU@-YkA5CAFwG+c7F`wqxwrEdNwq!S!M{-F3EKUM%mIM!(vk zfjIJjR`V{Bgz+xserkLqMFk43MmzACZ52N*k=y*b75R0m^6MVOj~9CYKaxe3l9y z9|ha^@Ss=1H>`?pcoaTf?0$TVCWVY|pv1>W?{j=?kK*HXVe9K-d=72lV`epcXkShI z(BTO2qhb%hmyfVi{8(F!Z+&*KJ+lJ^Z5y9*cCd=G1MMr~J8E{Y!)6EDoE?m*@vYAe zwr6$>RQQymgH;?IXkQWEQKN&Ej}GamvV2g8D>I%goXz|v8^v@C;WQi7VkQWiQ`oR2 z#Vc&ZCrCCru5L!AdwF3kZg`uKvofe3g|WC975}HBUgXl@J!t$gs}GGfy~pUrv39*> y@~eaOjAs-UZlIZ|OLiDVl^5B|Q9LLO`8AH7xiP=lL@vH*199=hr{`<4+4v8V@ErL7 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/metal/chains/blurs/vs_smart-blur.bin new file mode 100644 index 0000000000000000000000000000000000000000..4bd75b9814008936bc65bfe40a2e0f1fa1f8154e GIT binary patch literal 1487 zcmah}!H&}~5bXgj`3j#<3dN*pl1sIBIILJ{1(#J7d9!XYO6 z7tXdqR-S)Nf^>dh^!ZMT@7^@sGUqir(a20YPzi-`7It@=&n;mbg%e@rl`3-v&ew|U zXwLX%vp|L5@Ry&ZYxTWBrbk21quy?*G=a{87l?F3U=h2V9%)5K<#}v z%7^Rt)EZbK~>DsHG=Q%IVj-V~&%^X@zmYTMY0rqd#tLz%3 zh4=T^#+M5wPX-*o!_X_*NkC^dAi{Fe!DeGDZ5iogSr$+!>5r$x!SotpkMlimu4$M? zQ(TsQ>jD7$!q#avtM6hg4`4zDzI3>VwFMX|dd_qt8PSumYS3d9&O^F?Mjm#G{wf5W zBD133QB7`xGJeB-x7^Rt)EZbK~>DsHG=Q%IVj-V~&%^X@zmYTMY0rqd#tLz%3 zh4=T^#+M5wPX-*o!_X_*NkC^dAi{Fe!DeGDZ5iogSr$+!>5r$x!SotpkMlimu4$M? zQ(TsQ>jD7$!q#avtM6hg4`4zDzI3>VwFMX|dd_qt8PSumYS3d9&O^F?Mjm#G{wf5W zBD133QB7`xGJeB-xaNaB5bDuXl9I^qcIh zfv+5(;fk6m7LG@9V5 za$hb0d<4d7Hr+mjOkQ9huH;(NL+CAFprYqY2ht#VGIphU=)$>=_Rq-aPr+aLlw)K@ z^n0qwqpyr-c#e-KpvwqGUU~E@0L8`OP$ykEE)ZkvS<$CF-H5{?6kIWi>KQ&-K14-V Sj$4ly&0Hih(cDV&Jo^Rr8`#eP diff --git a/bgfx/shaders/metal/chains/supereagle/vs_blit.bin b/bgfx/shaders/metal/chains/supereagle/vs_blit.bin deleted file mode 100644 index eee8677be393b9a7a296a7e9ceda133a6160b432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmZ{iy-ve06on(il!X^S;!Y?PhXKsN?CkPcMxIn&oBU`GT zM6MA&U4WEJf>R)IBDquntk(olv5iLR1*0gM^~}9ta#=8BQVghxO@)R+S|w7d?QmJx zU|)axdDeJlXvgE_Nv#*Q{Dfe19%`MV#VM5CHD>NVLN9`)Qf1cFt10NXWOTn&^1YcW zsWPjFfprGE5Eq0A@cu|N&XC8<#8V*I(U^%S8bcz5If}CiIw!Z#%xE*S(P>ImllsW5 zyBP>{4jNioSH>(aiHaxnum0Qr*u%W7HuM5N7{kO5MgyWc7^1c7pNjRXLrt|JzTLqb qyw<3HN(=6eip}zFtnbAZIKByMeP5Q%wXd*-6h*B>XT|j5y3Q{yo&wVV diff --git a/bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.bin new file mode 100644 index 0000000000000000000000000000000000000000..cc7a76e66aa46db7f7ef4897fa1e9ccc15ace453 GIT binary patch literal 1058 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 F{s&FUYS;h( literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..1f336dae01371ad6aca32966cc7865018affab59 GIT binary patch literal 10813 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ℜpUVjAU~ic zTyWbS?z=#CY`Q}NB!`&aLVxZsPWI+yvtWZOe(BQkuIOG* z3f~tW9?>0*`C?{^&CKfw_r@jj0@&)v(`4$riVYrvOvR>>yX4*!RRx-XG~7{hUObb|)&1PNs^X zVimcH9 z%wyyNOTdRi5-NB+esTvmYSs)~*5(B{;B2gOw?Yz6tL=cH3e9=48sS)KZGr_$I%Y#* z3-A$^QVCZ0c7PROYLFM7W&^4fve+`~NYH*lC7NqE@Rjgl&7FDnv94o=T37>yqI5`7 z#F$f1`wre7M36E&$Q3Qit)cvw^pAct7qVC^u~=Nrp^#&2aLnuBao|_Rfjce&%Eq2--xudOcbvR~E3Ga$9$FmZ*ndUoi9bpfg-4bt`8WSmsk~4>%Q<~C79LS7~J)hLcW9I@R>HSV*2{0RGCrnJ6(sKt@h0+AHH^Yiqte#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin new file mode 100644 index 0000000000000000000000000000000000000000..da4e73e073f9f6242c99197d64ffb229cd89638b GIT binary patch literal 14328 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 PzV2O5_^Y(b%ZvX5V=p*S literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..ce8fb5c9af7febd575aed482a7eb486612a03d68 GIT binary patch literal 11703 zcmb_iOK;;i63$^y`3rmDUKUcfqqRuNcF;3@Szxex80=xNrywvK$LR^+M_@bCNgDHi z_GfNYkwsPM;ZCCN1{_Nw>#O?e!6L0+e*4#74zs^rot^#f;_U44aKHUxwu{Z`@UU2} z%w~05tUsL}j{C>u(LAje$6t@@-+o`*uJ-@lK0F@Hw{v6e*1N^gnm^{p)zfmf+ux2q z@m(+OmYsKP=Uvx%*LU8nI`2+8?@m9R|JiNMe;$u)&+m)%oi|_B^I!IhFaO-Fcl+L1 z|J~l-?e?3R25%mbhWX+CWd$?<*c}MjthNpIB3xwj*TwzTWF7R*H^=q--dtTBj*Bm= z`Th3#dSsTnEnGGwMpgc9XwDXPzDkN2MzMoYdKjZ%WE3|TrH3&Jaz^n3QCuHmlst@5 z4Myo z?adKj}Z_wCT!ulg91xo?N&{)Cp6_S#})?%Scc4=68PtBaMnZ-?eSpmbJ#D|6ot z&HZT~V>0*c(A)=7W#u!a z`{k9B&&WsA!7z-IrNLoo$f5%F61t>}2Ith#_^kAWtL(_wSy4_WBU2TA3YX(zESj3y zJSPi+E46tt!Qh!PuQ5-VCj$WHDf5UOKjmm@zSByb! zP{+deq^q|C8cJ`24a&2|Jy|O})`}m=(732zT_A($>jiv2$qk zI)hktL9f=9rGMt!<4#u6~M+~^(wcMwGdil$A?rK-sdA1(-IT86%}QL z3vlxjkn5ZhrQ(%7dOb?hQJn65nA&Af0O~sUqs?nTMgOHZe5;LA660)Yn8BLMQg2uY1d&nQF&CA3eaztm=)Nh`a@x3ruee!hA6$C5b@jA$ z4MCb`;ny#p^BxAbvi!a55+%2l9#6nyyw{@GMCd_bZKIHh;S+}Duo}XXE>fDw;bi9H z67jQcUfY$vS-2xIuc4}iNy|d3g$cDywmUqQh{poWB)JZfD!G}iXfxg9yPqT#hkb;E z)g<`*6rGKfiEH_rNRrDD(>PYtgc?ZWm=)L?wtkwec9a7M4Gv zbD`GAXd@3`q(-1B9&R*-$q|q!9c;)`%ZfI|0mnf-32qMI9dY=;=Yo!9u)ffdfXm~~ zKTLs*25~W^LR0GqHJ|kbZGg-;4tLvJs_Hf?#6V5?C4~ebfS~X|jd7LYsL5Du}f z1J*xctu7}}pPA0eIO3ZX;_Lu8OZ#^?@8_V!w=u*hKvmjR z6}bXl;GhDo=pw^1g867rPDs55Sz#1wACPNJY|sP@;1L#oA`&M7K_iOaCOhqg(o^O%E51N#>CWC z6A;RAJrR!OdnAV5!3o|b%lh(*PPM?3*hz@|O0r~F#xO#8=|{3k_8JxT8tG6j%7Ct+ z&O-o67k<{)(oo=s*N;FT;z5xL$FlT}65LGh7~#`IhwN4=>{d1lD6#Yr-Eg}*f=9x^ zV(Nk}6QLdoMRHl!*b26AY#0RC>A`+h4~FiFe06^Z_)IS>BIa}5)&beyDAUMgj5DG3 z!WcCZ>QCp)^oG?0`;dqevJY7`=1;R)A65~kdo(R=adh~@tVemQQG7+L2CB#b3PNc; zE1r9_))rIifZD3rW$*0T4(v17YFgBT0WG_`XHeZtGx$r>`lMZt{VgzM#jJSg;eg-6 zW0t9XK^9s(^h>Di!hVODp!&?_wA4d@gehhz{$N%upvj2Pw3m|(*ak0OdwFRxLv0zV zjsKLCvN$EBwi8!EW=F((kf;JU-0Gg$;8k&C!uymp&O~W_f+ry+a!!BfL+6QXE+^Ol zJnX)jjJyL?jK*@8XA6%fk>MkhqNW!~ng)>l+5{Vs%{>%ULZJ%$9h6l5CV(3)rYgwG z6Ng><_t%N+0wxo1Yg`F%rNT($siD_N>kjG0&)`=X&BD0w75&GbYuaC_o+AUzO*R6C b*JTU&y0LIBsk>jnTf5sh5?(4kKR^3FJmUcU literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin new file mode 100644 index 0000000000000000000000000000000000000000..46f7705b5102afaed3756576e763bc5bb0a14135 GIT binary patch literal 11482 zcmb_iOK;;i63$^x`3rO5UKUcfqqRuN5A;l578vXv274InDF_V5ae4ySPGCDTNgDkN z_fKtAkwsPM;Yp&-!LcN=9$(d0EYkYrw}1U`nEiNpcJ{x~+1caaZuiCPmfQ8=VYynH z?fSUfd^$fI_m8WidD<+GzaBTg{l2_e@Bh7fcs!b~=f>P_?w3bv{#YE>PpkX;{mu9j z-}T~d*?HG?-gTXKedpb(^X{bc?)207w{Ca-^LS)`eqU~Gz4@|P{IXwu`RD!Se&0Lm zzq`BJ`~9|t!J9{fVR5*7Spy89>=uM<*SiLKQC&pz*X7;LWF7D>w#Uul&Rkv|j>|9W z#og}eYGhXTJGg90jHdkE(40q@bNzUGyWVHx{OStgF*3%0Wyi<;+TQ#`G5c(8)~n?P zhQ)p+Q zq8=U}7ZmJpv05!C$l>bxdO^VrSNrv0QAgF9RHZA$ee*pG{9#BLlHnA`3akm$pQ)Tw%)RM`ZMp)F&8@KgLOQ2 z>L`hc5u9>7Sj$Vd7K$!wDF2MS zYpDin=|PM*$yz3Zwe%n+X5^@#3c9aQ0{}4Zp0+_?NIK67KPYT>Mg8fznx!>ub`N5`BZs6zbxf5l{fQCE1xOb z=a)`CqZm;K!)lx?4Gv2~77eg-=#nxToKr{Rv(gu?vLj<>MLC^}OjYBa*DO!

a=!%p=iP8`!#}N?0)-nG5j=Uvoe^7QJcl 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin new file mode 100644 index 0000000000000000000000000000000000000000..1816d716785515c1eefb05e466cb806955588b6c GIT binary patch literal 12366 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 ALjV8( literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin new file mode 100644 index 0000000000000000000000000000000000000000..cb44c5354faa52c8949a2b9a989b6aa1b35f0732 GIT binary patch literal 11908 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 NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f6122c970c461e4f2abee12921a038fc4d6babe4 GIT binary patch literal 5417 zcmbtYO>g5i5cQ!a-+O5yoHZazhAeNLEcU;5 zI3netN+sLylGx&K-preMLt5`X{PEps`Q!a$^27I&$@#Re9$1whiqkRQ6zov6d3iHE zwat0cvP+q_@7wajr+iy9e^$qH%f3t*+m&_RChT+87MD$3H(P$=dMcbxrSoaxe409+ z&Ye#eH`A}~!2de8Ch|{txl7nXnZ0ZBhu`b6ZboMT4GBhht`}^mDWdr(eLS6|&9=@oPo2qD-=V zwW~8Mb4Ou&IDXEX3`=Z2vpY0S0)&b>pg?)*@napG3MSFZmvLR(1cz67v30du9gI2>4_mn zxLOg6l{bc)D;^UN9($v>+2SZnT@ubcQIZk9I2Ah=-Y6rCQMq&JjWWU*6+HJV}~Mn%tkRi8#9j8WNhU)|56%cE=7b1Ho9t9(Fta-vY_b6@QPigVrzs(su^7AbXT6~67xF${!vHYn85yOp#K{uv8dwr!$(mZQ zCg~bh$iC3f!64LN2sFHq>47F#R3aJUb%yY`Nx!$ihb44jq~)@bvH!9Geb z)ii9Q1oJDyBnH}TlG`!RE`>EKhQU4>1Jyfhvtq!KT2+=-$Z8CkDog&lDx2XVtw7YZ zqmz0Nz-5=QAPDl0r|vU+Gb3Tiel-rnJVeWo{lZ=}g)`b{PVse=0U0c-La zqpwQNWmHqqmDA5);q!JX;+@DGtLvI^A;DCi|&B15H_=8p__S{Gbzs%8_Iop;|JY&!(aJs2K+?;9J!J~1Y1=2+VGEpBw*aFeHWYAZ| zWH-09aC`ScU(QWSzR@kIk&VA4BW!8sSE~A6NKhLtTUAH3K|7Q({GZf3xv3e*ZO}e_ zq;FyJyiB61DiN!hJzA~bL=86FfV{*ar1SPVF3@q$Aw3Btv;Z)q3huYU16o zO$jfrfQPQx*l%5L%C0wMAkq{Yll%)!l|s0E>4JsEefKgeqObh`#1t5VYYKR$R&}r4 L;I-G+>2&fhEWC{{ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..1c9652688c6eccddcfb0040601f125a8b26b64cf GIT binary patch literal 27844 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..896071a63cdb9996e63e7527d97177dafdc4d321 GIT binary patch literal 5867 zcmbtYO^@3)5cQ!a|A1b4VK0TWbybs;{DIx%QXps#K@UMs3&T)sd1FA94OvdT8}y&{ z$8`85&&ZUs4KImI&hX8=c{Aeb-G|@5JI;Q191Q;belR#4x78D?@?CK}A!D0zpEoJ{yljf|YQL}7{NA@JysOf?ntE3= z@9M<6I=vtM;}87LQ{y84l$V>7J(bIMb^i3*zTDTnUVl~F&A#42!f@;c%y&iAVZS!D<7Qpd{ zF$SbJr@9d92VIA^Y+bDK5=`xewjHr!zB`mftxr1c4ohcc*R@qV`~ruPkZn#Hf3JvE zlu5R&Hv6S6v!Srr9X{vvQkU30vp3o}jWkqZfFgBLi$7wK4qC)|eYs7Lh?4W)aU46$ zl-YB&VBB*s#9tR>L$>HvTEu37(izG*ipV8zrl{7g#DTJC7ZE{&~awLN(Ne;K0n3Ci=TR6GS z7A~CLqNx!HsKL>uHVsaVL^3C-(Z-mQ+=!IsRF#CSIW3&_BiTtjN~9VkZFcj}>?GEZ z?9A)4i6Mb2MWiX1$!hr!U`QJog+zh zT86ZCSOyYL6#0!4#SKJB;#b!TGoGRdF6fL!QIvl?nrHas#@LMg;tmj#SX;*IXZBT7 zxEH`X+t@1y@8OdKj9xAXGQEv(ZJ#^?j)T!SI;l8K#-IfiWt&N=L%M*8RHMTiU;96> zTQqo_5poY9T_-7Aqxn*WTh~YDdvWnp*;U2lWRG2R@$r;*xy>HsS zmYKCo-R)$ioS|*texm;A9`NiAu(GgWMFtsMfHU7vxKikZPKJj!U+L0`Yfz_~D?*SS z?cqwq9kW#H0c+RUs*)%ND+rl6K3_}Ci=Ud#@S&4VICKV@eFce150|mfPGYOUS5c!| zyUPk8#LDTLxX=f;9FmIwOl@FD8AM7|=w2?>A9jj9H*t(w*{?>>(r8mgBFnTe(SNb4 hQdjlrc=I_j!5?k`#1&WvR~PVAw6d1)Rd+ZX{0F;~4(b2^ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..49ade63740b3db14958575ce45f24140ba01d707 GIT binary patch literal 6041 zcmbtYO^@3)5Zyyh{sTSq!d?n#>#8Ox`2)Mjr9jXef*yjN7KWkN^2UHH8?u~wH|QVe zug-8t%0rp*Zo|v2O%D0^-n<#ndiU|q9}d%>9&T>_`|;-Hc-T~rtjf2=VV^Gxwk?{x zyc-;v`nYV^smz-XP5JS2zAEbX)&AJ9uLH)`!OZE@q7*% z4;f=1dULD`vAV}Ryk)CmnU@f1CNOr$4*7Op7B%j4*zOlL%8X-FJopNmI!88~5PzqH zR+34!sn)v%rddnaZ1-RCdVwjnpV=D>P9ua$G*F~=YVn6G!b6J~#}}J~m?$~@6UVW| zOqtmi4P!qCV?22=(0&FZ4aRu(VxXA~Miz)6dbGmQFc{-t48K-TXkbE}|4A^0U#ls> zm`1e7&C2!snrt4=B%G6k7T`wDtkT z+wTRfeGyvwlODwct$h(%`+(wAOwigFp|uYvj$)_wSubey3;8gbLj$nSGtx?7ijyho z8kiDf%IR7#C+Qq!$i2|e#voK?HM& z0n2FW_+{>-6Rw(zWhZ$sJK9jB+fX>IESPiHIjXoVrL(2O z4sGb>j@m%djv~Laqu7Qho%5^fg>Fw#1Q&G1qA1Eg9rS1TX4}}5{bn~1;}|1j_A7fa z6z&D^%+~R0fp_z90zuDb1esn(xQtJp0LQ{04w8z~WCUJNr)-&|c%(C!ND&>L__+R_ zU6aAHm>~BE(p@BlJ!zjH`bg(9%F%T}y79sa7+=@I$tslr*4?sY2`>Y{5Lytl=UK)n z`?-C_wi3dk>tW~yE%a?GbZfTGTEprs!NGIA7&bP!WS}n|9*lgkNF9aIy|srF@fTyq z+SZx~LyZkiXX%vPpUcJwtRoG5RdAg(7qn%1iJq}p8e8vTBX~Ug+*6&^9m8sa+lAI|09jpq>doQPT!>kW~J58xwgPF z1{6{Ok#ZIJ6(QBnP$i%3kJ_#5cWr2?y(uG+WoS(DFSc3gx?XLsU!ErPH8X(N1mofA Q0^Z?PCKBF34+b~i0G#zjl>h($ literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..453fce0f89b8cc7af5fa1d4b30102b31c887ffe7 GIT binary patch literal 6242 zcmbtYO^@3)5Zyyh{sjekVK0HSbybs;{DIx%QXps!K@W?b7KWkN^2UHH8M2&uH|T%w za70Q&nery#W!EN$^Jd=6Jkfgp@Yher`7e(*HxEDG+?_+pG#E;c^Kaj~Qb? zdVQ)gvAM@Oyknbeo#tSwH_&#>j_Ll8XBB!n?hh+trPt9a9DN0+R>(Rh#4i=miZaP| z#kO2wnHvi0{ozYmt+2%AGkc51aez=!0~9DvE&iAV7_*#KjL&c5)SeL!(CCg|)7-`NKgi?MV2tQU0pg?yYWK>*D2j7TYLak53b2DSv* zvQ!K9B;CUb*%ulr3_=M*py7pNw=6*8u(<#SJdR`{#!Sp3KAVnN62&w4I*BIa8bgw! zav%~bIXYdiMU(5DvXZlkpV-MEm3DGeDTGprHo3$*IV*#il^h*6F|(5EZPDa2wV8KnRwN56HG41?R&G`+E$pte*jm_y!*f=4l1hnGQqpF(@Xb!r9+KS3 zj?;#LJ=&JSiiun4QMG_$v~>KkcG5Ce;$pIs+&eoeDAE=bPA3cYtn4gSY)R?4w6eoC zv};G(KvG4KKd2~15TzBrx?VK$6a;WVXDkSU^wY8V4Bw25&Drn9ftZG98M5EltEO-- zfM<4NuMRk!Pa`mT=@4Xm9pTbGdIlT=gE*K}7)KN61r=qRNsJ+NU?N6zc;e&vdv=Wm z$6@Ia8Tv&W zP=;>`1PZKUQ1mxpn^3xeq9OFAq?f4`u4&ZUwozZ>9cDAA!GLr})vlpE1 z?(QT^uj-!H%z6OBOkDuL$?JUS!gV2mWI;@zKK-D&K9G|u+^88RrotK(csr%shH!y1 zAGx{9H7~%TGpOvQtXnyiiMEW*rEsnegIdA0Q2psUcs367(C9pZ1{sb3;Vvz{5QZLg z_itYjM@1ZJk7>6agO&2`|$}qnrN$H|u}l literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..684131e13c7221b4616406a04d5ae6ed51825ed4 GIT binary patch literal 6381 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 J`#Kt3{RjGbc?bXi literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..fc154cbf793a7717c46ed9d3cff7318d30983cab GIT binary patch literal 1228 zcmZ{k!H%0S5QaJIiKp`PY}(Ito-bN0fKGM!FsY5g0Z)N0j@ct-5c1+a+9!_D-D))3$N%B_%GpuK zCfJlIkS;HbzCK9tBj~1kjk0A|3L4PuLL~&|TX$1BC+-R3C|R+kY*bw`*m0}KiI$8X z4qH?S4v&1{qvLyrY>kGRXMH?UX|3DDZ(!a`z!BJN5zwpVd?B*5>luIJ>npk&?juW5 zoNmz$r<=aWXP6E$23$N{2R2=wHHhHQ$UBq_pm^FLy7m2Rb5}NbmWCRmk*SBz#&U4c zqh(N&0Pe?0&)Wld8>{3_-%XPTvDT)Upp zFV7DKcwL9ykJb4KY7w9oxLew^KrOJDqnZ%4!2P5i)vTi0b*`ZrxB!n@*uLIB_lFW3 T$PnojBvo2+cOvk;#BuZw_voEk literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f39ca902371af7015d9ea896a99b72cc38a1519d GIT binary patch literal 2390 zcma);O^=%}5QcN;rTm3ne5y#h>te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..fc154cbf793a7717c46ed9d3cff7318d30983cab GIT binary patch literal 1228 zcmZ{k!H%0S5QaJIiKp`PY}(Ito-bN0fKGM!FsY5g0Z)N0j@ct-5c1+a+9!_D-D))3$N%B_%GpuK zCfJlIkS;HbzCK9tBj~1kjk0A|3L4PuLL~&|TX$1BC+-R3C|R+kY*bw`*m0}KiI$8X z4qH?S4v&1{qvLyrY>kGRXMH?UX|3DDZ(!a`z!BJN5zwpVd?B*5>luIJ>npk&?juW5 zoNmz$r<=aWXP6E$23$N{2R2=wHHhHQ$UBq_pm^FLy7m2Rb5}NbmWCRmk*SBz#&U4c zqh(N&0Pe?0&)Wld8>{3_-%XPTvDT)Upp zFV7DKcwL9ykJb4KY7w9oxLew^KrOJDqnZ%4!2P5i)vTi0b*`ZrxB!n@*uLIB_lFW3 T$PnojBvo2+cOvk;#BuZw_voEk literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..fc154cbf793a7717c46ed9d3cff7318d30983cab GIT binary patch literal 1228 zcmZ{k!H%0S5QaJIiKp`PY}(Ito-bN0fKGM!FsY5g0Z)N0j@ct-5c1+a+9!_D-D))3$N%B_%GpuK zCfJlIkS;HbzCK9tBj~1kjk0A|3L4PuLL~&|TX$1BC+-R3C|R+kY*bw`*m0}KiI$8X z4qH?S4v&1{qvLyrY>kGRXMH?UX|3DDZ(!a`z!BJN5zwpVd?B*5>luIJ>npk&?juW5 zoNmz$r<=aWXP6E$23$N{2R2=wHHhHQ$UBq_pm^FLy7m2Rb5}NbmWCRmk*SBz#&U4c zqh(N&0Pe?0&)Wld8>{3_-%XPTvDT)Upp zFV7DKcwL9ykJb4KY7w9oxLew^KrOJDqnZ%4!2P5i)vTi0b*`ZrxB!n@*uLIB_lFW3 T$PnojBvo2+cOvk;#BuZw_voEk literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin new file mode 100644 index 0000000000000000000000000000000000000000..f291cdbff419c717722a353d28094a508d7c4900 GIT binary patch literal 14649 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..b8a55e3f1b24ce5350e2c613d43a3b68451c1761 GIT binary patch literal 8833 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 NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..97972ff47591e7f36995eb88d649a13630828742 GIT binary patch literal 1272 zcmaJ>!H%0S5aqBZzG6-lRFRhudW!bm9#&mx)m~N+@)9R?1$JcYEXk^WS*fRfK>wnH zF~(%m-pJ(5y!Yk}e0}_Q^Lz2@XB7Rpi6YZ-u?ImL)*fiZpkbQU>$ug*R2sUP>U&*3 zexqBaK8b_T@EQZ`YDskgw5((;RR&K_RBOebjb=%fZZ_)?vqH>4wp?>5W~gO|$`Pem zS4pY1^I^G#{kX2@v(XoV_I3F%v5mxmo&t_evzM4-$&>qP4;-t@tJQoR|3lXo!FN(M z!KS(bOnKz&&a7XS3TeWg|`FR}6JV;1pQ23|#5vaHOiVmd0mt zeu2B;Zt^4}*#ed%OZz5|=uU_jJDED^a^Rc14)H1nO!ns)m?JIIRUwFp_gx*)ALx5||NjGcm_vZf! zcQKh-P7q5x*HQ%IinlpjXeq3gt4`t8T?Q^ZxKPrCUJBC3m|(^qFbp41u(0(1bKXSO euiq`eTJZq)@d=J*sPujn(?$t*Huw(3ar74lN3DGT literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin new file mode 100644 index 0000000000000000000000000000000000000000..6a12b320a2dccac0bedb5598edd4f5fb65fe3a9f GIT binary patch literal 21489 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin new file mode 100644 index 0000000000000000000000000000000000000000..edfa341b54cb54abdaf0bd32c0c2ac15aa7e7d43 GIT binary patch literal 9852 zcmds7&5qkP5Z*&i`xHC{Qo2zrk)qc~lS|RGdk9iA=qXqj%C5XI;GeB6XKe?0k3Mc^ zhNL($wOZR71Wj^CLYW+W^ZN}+y?*z{Pj7$w_u}Ma`sCzfwH(iG#H^T>%iH3r6w|UQ zCNEBx)nav3iS?wY-c*x!AB*d9aWT7HRpRrh5TnVws50?sSe5Im`FwHRd*Plc_B4HQ z`lVge+g0UceJmy;C2l6e*Nfuj*ZE|=xOdgxv+-!Yn0g3GtPsL*Io_7=G7F5J7K@v* zq8~`y2!v0|*^WjQhSl;-F`kL2MdjhNnheL{{rhEA+?2!d?DFzVT+L@N+?8k{J`uEL z1#3R6Mx$~O_2SD*0C*;Z0L0a5QD)b_kR4x%>+-6Yz*PGK%{>##VtP9%7bIypy&bw) z_Ianow|`yyj+VjqFu^H+2nFvNgp>?K()o*MDv#7BCXZ0|_E%>lbUr3|PC-4fOtk^n$( zp3#lJqbGiLz|&sr2LoDWU($!QWcr8#BQb6xVRf{eiO9f=BY0UHhlWXg+Ms1p^4gAS zlb^(g6K?YQSs z&0UwOgVoDh)oX@zN^uR~_6RF(`WR4IyMMzpmlhaPv?T5&V6~tWWIR)|-nYV)rVj$6RJ3Yjm;v9!V5xc# z7!?Hv4D+f&i7ctx!B66oH#>Z5<^>YRYj3~ zln#h0Be*5Xa%=p+l1Ki zFo_tp7HJGt9>U@^Hp3db53F?vOFsgZslXT@wY8{xI%{Fsdk7ZvF>RjgKLS=iv=)_d z2McTYKCoJxc>V}j=O%PfVde+x_%LpvrK5S#^}G@h_ItK&OH<-yL~# z)3#{Sz6iPx`r|0gsVX_6Nn*4{S;~3`lqFanx|f=C^o^@@fk>bKvKK_OaUvFv7ALAlz*1f^^TT&kmLz9ri46VYmL<;mlCi#{w)Bv))J^^OiDda7 z^1tN#FZbd9d&<%y_+N(nFFF6qefS??v2<`{=@I-d4gd3QNpeD!NT^4arNJZe-<*JO zSc;RMV&r#VS%RfUS4(9m58EE@hwrE?DbCQ!pT6+j(w;l1|9iKjIO{9M`mTm#2b3jP z-xW3YiS%Vjh5WBL|EqoYzr8HM(k^T*`N3d?{I59wt9|&ty)41f<6#;8Z{$BGRJG5R z7qc|%mSE}eu)-~`;^e0o`L&qc_cUR*1WS*HWhn1^E=!!Dl|PvLLCO-HeoD8EQ=IqJ zImPHR*ev6A&lVDRy2coZEcJ$`R&M9GYTk&zb`z4D-j~7EMt&yR4@VUzc{Lz5D?Tji zeIJ}~;iZd(10xX3@xcRt$5+5kk*$DHumW?ju_A4(NW&F(yDPB$sZnLHb!<8J&AB0S zY!s#i97H?I4&b!GoJfGlpZmwK<3@HueC|#e zW$ewi-fY1mPn{uk9HY4Bf(t!QdVWR@X2dzoBT;)o0w>*Yu2Q4-fYBLW0WkXT2*8`e z0b?wD4Zz^5BLHs?2aKWkH2^~d9|8F8AizkQb+yTP$CqQrNB1%|L^Eh)H{1GBC4;ob zp~(V@uck2GQ{~uGbqJF=6J~Bgo5FbilVktWAxx2{EwXJ3GTyc1*tK*C>oa8LmY260 zIkg&1teoa^q=?i#65uh9xwQZ;kQYu!QWighqO(EupdU*RFsO_Y4fZC2BmROcM`}YK>9d zz%%H^gDK_l;4ahSfkQSHDH@vF&@-CSfO`g1tUaUQ^1NwtjhW&+L&)1a)0joR4?Pp+ zjOIC`gPc*_mT2URZsZJ%8kW$^5>6Q%=8Wb!qjz%#bnMDu-N+f;$Qc+l@U-TP4su4b zoYDQjGdyR=tF4}4vyAU+&-ia*cth03I|6eU8Q}#DYwF-9DE>Yk3}W;BPr|?3@>BXG UdQrmXM>F#Y4SXr|<@EIAKLe;_3;+NC literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/super-4xbr-3d-6p-smoother/vs_blit.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin similarity index 83% rename from bgfx/shaders/metal/chains/super-4xbr-3d-6p-smoother/vs_blit.bin rename to bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin index 122b7dee5c387c772067b0ca196a2f12b636ec8d..79448501cb260897e6f35ba6fab4c93ec8b1d7be 100644 GIT binary patch delta 142 zcmey$dXtSOEZBp^-*tv31A`ayMjjzX5e0>`oczQR6NR$)lGKXi{QRO6!-*RtC+}xu zpKQY@B@dS`1 UU#f?sQLm!1vQkrX@=hij0ElQVasU7T delta 37 tcmcb~_LY?te#EqCK}gth&;wy+jdWvrbAyAOe$xUG0CbZEP^X zA-N^P*z?Rg?}Yq${PCd-KCNc6?;mHgs!XyS$l^UN5Agx;%9cK2zWC9*rs_*91usFJk1LWtX450MeuO}AdG)m}1OA_yJlw|Am4cO!v{hFP)M(}+G{7gm9JXPB*F1S(V#v8TDpnxFY z*||bb_J?C!M0^W~V+)-0`+hTpib8bWV88W%3l8S~dtZD4l?8~VNyYRKYUnO)Qn~iyEL#x-% zhK*i9#B#eabrQn5rUU#c+j4tR92w*LBG^0)zBh^Qox}GyzS8v>a6ZP1;GPDYu5{;9 zA2z2>rbAG5_9xr$M{SHe${cf9VP69pD4>Bx;b0Oi7@>(_1zchAg&TIn%&dEvInXeN z3UjDo4kwwzbIf6D>gzo1UPT{j=#jdA$l^4^rKCZ&m812lRnO2Qw$39H3(e_cX1d7< zc;|X(8f7n0Yt`ZJ3L5-WBV7}yZQ?}EVGn4!2Xwgy|GFL!m#*`m_-muQJlY5|R)I-X NWa9Nf-=&5z`w!ry3qAk< literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr-hybrid/vs_blit.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin similarity index 71% rename from bgfx/shaders/metal/chains/xbr-hybrid/vs_blit.bin rename to bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin index 122b7dee5c387c772067b0ca196a2f12b636ec8d..5d97f29fdba839411d694cadc1be7986e3772c99 100644 GIT binary patch delta 299 zcmey$`i7k+EZBp^-*tv31H)bBjXXk(A_@v=Ir)htCJJToC8-t3`T0dDh7&hPPTtSR zKG}v*N**p>3X+d6&a6r`wC1X{<|<1q0t!ri$SAtGgwd0+9&C(}LP>5xSz=MVku{eB zoULH1pkb(Ipsx|1TapuBs)uBhUPYy*CP*#R6;SQQNZO6{Dyx7dK+M-L&@<3c01{wL pFx7e$3Lds_>+~v6be97)!(63T36cUkBVP~6#|S0HlXo)N003hoU|#?L delta 37 tcmaFE{*{#{EZBpEvH8s3jp_@40r$l diff --git a/bgfx/shaders/metal/chains/super-4xbr-3d-4p/vs_blit.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin similarity index 71% rename from bgfx/shaders/metal/chains/super-4xbr-3d-4p/vs_blit.bin rename to bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin index 122b7dee5c387c772067b0ca196a2f12b636ec8d..5d97f29fdba839411d694cadc1be7986e3772c99 100644 GIT binary patch delta 299 zcmey$`i7k+EZBp^-*tv31H)bBjXXk(A_@v=Ir)htCJJToC8-t3`T0dDh7&hPPTtSR zKG}v*N**p>3X+d6&a6r`wC1X{<|<1q0t!ri$SAtGgwd0+9&C(}LP>5xSz=MVku{eB zoULH1pkb(Ipsx|1TapuBs)uBhUPYy*CP*#R6;SQQNZO6{Dyx7dK+M-L&@<3c01{wL pFx7e$3Lds_>+~v6be97)!(63T36cUkBVP~6#|S0HlXo)N003hoU|#?L delta 37 tcmaFE{*{#{EZBpEvH8s3jp_@40r$l diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp index c3aeb586136..70d678d1f2b 100644 --- a/src/osd/modules/render/bgfx/chainmanager.cpp +++ b/src/osd/modules/render/bgfx/chainmanager.cpp @@ -59,9 +59,9 @@ chain_manager::~chain_manager() void chain_manager::refresh_available_chains() { m_available_chains.clear(); - m_available_chains.push_back("none"); + m_available_chains.push_back(chain_desc("none", "")); - find_available_chains(std::string(m_options.bgfx_path()) + "/chains"); + find_available_chains(std::string(m_options.bgfx_path()) + "/chains", ""); destroy_unloaded_chains(); } @@ -74,9 +74,9 @@ void chain_manager::destroy_unloaded_chains() std::string name = m_chain_names[i]; if (name.length() > 0) { - for (std::string available_name : m_available_chains) + for (chain_desc desc : m_available_chains) { - if (available_name == name) + if (desc.m_name == name) { delete m_screen_chains[i]; m_chain_names[i] = ""; @@ -88,9 +88,9 @@ void chain_manager::destroy_unloaded_chains() } } -void chain_manager::find_available_chains(std::string path) +void chain_manager::find_available_chains(std::string root, std::string path) { - osd_directory *directory = osd_opendir(path.c_str()); + osd_directory *directory = osd_opendir((root + path).c_str()); if (directory != nullptr) { for (const osd_directory_entry *entry = osd_readdir(directory); entry != nullptr; entry = osd_readdir(directory)) @@ -109,7 +109,7 @@ void chain_manager::find_available_chains(std::string path) // Does it end in .json? if (test_segment == extension) { - m_available_chains.push_back(name.substr(0, start)); + m_available_chains.push_back(chain_desc(name.substr(0, start), path)); } } } @@ -118,7 +118,12 @@ void chain_manager::find_available_chains(std::string path) std::string name = entry->name; if (!(name == "." || name == "..")) { - find_available_chains(path + PATH_SEPARATOR + name); + std::string appended_path = path + "/" + name; + if (path.length() == 0) + { + appended_path = name; + } + find_available_chains(root, path + "/" + name); } } } @@ -189,7 +194,7 @@ void chain_manager::parse_chain_selections(std::string chain_str) size_t chain_index = 0; for (chain_index = 0; chain_index < m_available_chains.size(); chain_index++) { - if (m_available_chains[chain_index] == chain_names[index]) + if (m_available_chains[chain_index].m_name == chain_names[index]) { break; } @@ -198,7 +203,7 @@ void chain_manager::parse_chain_selections(std::string chain_str) if (chain_index < m_available_chains.size()) { m_current_chain[index] = chain_index; - m_chain_names[index] = m_available_chains[chain_index]; + m_chain_names[index] = m_available_chains[chain_index].m_name; } else { @@ -240,8 +245,9 @@ void chain_manager::load_chains() { if (m_current_chain[chain] != CHAIN_NONE) { - m_chain_names[chain] = m_available_chains[m_current_chain[chain]]; - m_screen_chains[chain] = load_chain(m_chain_names[chain], uint32_t(chain)); + chain_desc& desc = m_available_chains[m_current_chain[chain]]; + m_chain_names[chain] = desc.m_name; + m_screen_chains[chain] = load_chain(desc.m_path + "/" + desc.m_name, uint32_t(chain)); } } } @@ -369,7 +375,7 @@ int32_t chain_manager::chain_changed(int32_t id, std::string *str, int32_t newva if (str != nullptr) { - *str = string_format("%s", m_available_chains[m_current_chain[id]].c_str()); + *str = string_format("%s", m_available_chains[m_current_chain[id]].m_name.c_str()); } return m_current_chain[id]; diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h index d527bc7122c..022fe6e3b2e 100644 --- a/src/osd/modules/render/bgfx/chainmanager.h +++ b/src/osd/modules/render/bgfx/chainmanager.h @@ -30,6 +30,19 @@ class render_primitive; class bgfx_chain; class bgfx_slider; +class chain_desc +{ +public: + chain_desc(std::string name, std::string path) + : m_name(name) + , m_path(path) + { + } + + const std::string m_name; + const std::string m_path; +}; + class chain_manager { public: @@ -60,7 +73,7 @@ private: void refresh_available_chains(); void destroy_unloaded_chains(); - void find_available_chains(std::string path); + void find_available_chains(std::string root, std::string path); void parse_chain_selections(std::string chain_str); std::vector split_option_string(std::string chain_str) const; @@ -79,7 +92,7 @@ private: uint32_t m_window_index; slider_dirty_notifier& m_slider_notifier; uint32_t m_screen_count; - std::vector m_available_chains; + std::vector m_available_chains; std::vector m_screen_chains; std::vector m_chain_names; std::vector m_selection_sliders; diff --git a/src/osd/modules/render/bgfx/shaders/chains/blurs/fs_smart-blur.sc b/src/osd/modules/render/bgfx/shaders/chains/blurs/fs_smart-blur.sc new file mode 100644 index 00000000000..78229ec9c49 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/blurs/fs_smart-blur.sc @@ -0,0 +1,64 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian Smart-Blur Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +SAMPLER2D(s_p, 0); + +uniform vec4 SB_THRESHOLD; + +// Below the thresholds, blur is applied for each color channel. +// Threshold is the max color differency among the eight pixel neighbors from central pixel. + +bool eq(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r < SB_THRESHOLD.r && df.g < SB_THRESHOLD.g && df.b < SB_THRESHOLD.b; +} + +void main() +{ + vec3 A = texture2D(s_p, v_texcoord1.xw).xyz; + vec3 B = texture2D(s_p, v_texcoord1.yw).xyz; + vec3 C = texture2D(s_p, v_texcoord1.zw).xyz; + vec3 D = texture2D(s_p, v_texcoord2.xw).xyz; + vec3 E = texture2D(s_p, v_texcoord2.yw).xyz; + vec3 F = texture2D(s_p, v_texcoord2.zw).xyz; + vec3 G = texture2D(s_p, v_texcoord3.xw).xyz; + vec3 H = texture2D(s_p, v_texcoord3.yw).xyz; + vec3 I = texture2D(s_p, v_texcoord3.zw).xyz; + + if (eq(E,F) && eq(E,H) && eq(E,I) && eq(E,B) && eq(E,C) && eq(E,A) && eq(E,D) && eq(E,G)) + { + E = (A + B + C + D + E + F + G + H + I) / 9.0; + } + + gl_FragColor = vec4(E, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq2x/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/blurs/varying.def.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq2x/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/blurs/varying.def.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/blurs/vs_smart-blur.sc b/src/osd/modules/render/bgfx/shaders/chains/blurs/vs_smart-blur.sc new file mode 100644 index 00000000000..c82d7c82bec --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/blurs/vs_smart-blur.sc @@ -0,0 +1,48 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian Smart-Blur Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4(-dx, 0.0, dx, -dy); // A B C + v_texcoord2 = v_texcoord0.xxxy + vec4(-dx, 0.0, dx, 0.0); // D E F + v_texcoord3 = v_texcoord0.xxxy + vec4(-dx, 0.0, dx, dy); // G H I + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_eagle.sc b/src/osd/modules/render/bgfx/shaders/chains/eagle/fs_eagle.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_eagle.sc rename to src/osd/modules/render/bgfx/shaders/chains/eagle/fs_eagle.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/eagle/varying.def.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/supereagle/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/eagle/varying.def.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_eagle.sc b/src/osd/modules/render/bgfx/shaders/chains/eagle/vs_eagle.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_eagle.sc rename to src/osd/modules/render/bgfx/shaders/chains/eagle/vs_eagle.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq2x/fs_hq2x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/fs_hq2x.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq2x/fs_hq2x.sc rename to src/osd/modules/render/bgfx/shaders/chains/hqx/fs_hq2x.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq3x/fs_hq3x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/fs_hq3x.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq3x/fs_hq3x.sc rename to src/osd/modules/render/bgfx/shaders/chains/hqx/fs_hq3x.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq4x/fs_hq4x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/fs_hq4x.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq4x/fs_hq4x.sc rename to src/osd/modules/render/bgfx/shaders/chains/hqx/fs_hq4x.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq3x/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/varying.def.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq3x/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/hqx/varying.def.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq2x/vs_hq2x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq2x.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq2x/vs_hq2x.sc rename to src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq2x.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq3x/vs_hq3x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq3x.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq3x/vs_hq3x.sc rename to src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq3x.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq4x/vs_hq4x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq4x.sc similarity index 100% rename from src/osd/modules/render/bgfx/shaders/chains/hq4x/vs_hq4x.sc rename to src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq4x.sc diff --git a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc deleted file mode 100644 index 874846cce0d..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, texCoord - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, texCoord) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc deleted file mode 100644 index 7d857008291..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output texCoord, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - texCoord = a_texcoord0.xy; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/warp/fs_dilation-horizontal-fast.sc b/src/osd/modules/render/bgfx/shaders/chains/warp/fs_dilation-horizontal-fast.sc new file mode 100644 index 00000000000..3f03d8e6adb --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/warp/fs_dilation-horizontal-fast.sc @@ -0,0 +1,46 @@ +$input v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's dilation-horizontal-fast Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +#define TEX(dx,dy) texture2D(decal, v_texcoord0 + vec2(dx,dy) * v_texcoord1.xy) + +void main() +{ + vec3 D = TEX(-1, 0).rgb; + vec3 E = TEX( 0, 0).rgb; + vec3 F = TEX( 1, 0).rgb; + + vec3 res = max(E, max(F, D)); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/hq4x/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/warp/varying.def.sc similarity index 68% rename from src/osd/modules/render/bgfx/shaders/chains/hq4x/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/warp/varying.def.sc index 57a7a910952..8404fc635e1 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hq4x/varying.def.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/warp/varying.def.sc @@ -1,8 +1,6 @@ vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = 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/warp/vs_dilation-horizontal-fast.sc b/src/osd/modules/render/bgfx/shaders/chains/warp/vs_dilation-horizontal-fast.sc new file mode 100644 index 00000000000..828dc3078cf --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/warp/vs_dilation-horizontal-fast.sc @@ -0,0 +1,51 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's dilation-horizontal-fast Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + // B + // D E F + // H + + v_texcoord1 = vec4(1.0 / u_tex_size0.xy, 0.0, 0.0); // F H + + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-3d/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-multipass/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-accuracy-smart-blur/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-deposterize/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-fast/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-multipass/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv2-noblend/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-multipass/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3-noblend/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv3/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-dilation/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/fs_blit.sc deleted file mode 100644 index 9af7bcf0ee6..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/fs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input v_color0, v_texcoord0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -// Samplers -SAMPLER2D(s_tex, 0); - -void main() -{ - gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/varying.def.sc deleted file mode 100644 index c65b5426733..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/varying.def.sc +++ /dev/null @@ -1,10 +0,0 @@ -vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); -vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); -vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); -vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); - -vec3 a_position : POSITION; -vec4 a_color0 : COLOR0; -vec2 a_texcoord0 : TEXCOORD0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/vs_blit.sc deleted file mode 100644 index 405ef8feb3b..00000000000 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-mlv4-multipass/vs_blit.sc +++ /dev/null @@ -1,14 +0,0 @@ -$input a_position, a_texcoord0, a_color0 -$output v_texcoord0, v_color0 - -// license:BSD-3-Clause -// copyright-holders:Dario Manesku - -#include "common.sh" - -void main() -{ - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texcoord0 = a_texcoord0; - v_color0 = a_color0; -} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv2-noblend.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv2-noblend.sc new file mode 100644 index 00000000000..ee5ebb4398e --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv2-noblend.sc @@ -0,0 +1,210 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-noblend Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 XBR_EQ_THRESHOLD; +uniform vec4 XBR_LV2_COEFFICIENT; + +uniform vec4 u_tex_size0; + +SAMPLER2D(decal, 0); + +// Uncomment just one of the three params below to choose the corner detection +#define CORNER_A +//#define CORNER_B +//#define CORNER_C +//#define CORNER_D + +const vec4 Y = vec4(0.2126, 0.7152, 0.0722, 0.0); + +vec4 df(vec4 A, vec4 B) +{ + return abs(A - B); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 eq(vec4 A, vec4 B) +{ + return vec4(equal(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 gt(vec4 A, vec4 B) +{ + return vec4(greaterThan(A, B)); +} + +vec4 abslt(vec4 A, vec4 B) +{ + return lt(df(A, B), XBR_EQ_THRESHOLD.xxxx); +} + +vec4 absge(vec4 A, vec4 B) +{ + return ge(df(A, B), XBR_EQ_THRESHOLD.xxxx); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), Y); + vec4 c = mul(mat4(C, A, G, I), Y); + vec4 e = mul(mat4(E, E, E, E), Y); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), Y); + vec4 i5 = mul(mat4(I5, C4, A1, G0), Y); + vec4 h5 = mul(mat4(H5, F4, B1, D0), Y); + vec4 f4 = h5.yzwx; + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = gt(Ao * fp.y + Bo * fp.x, Co); + vec4 fx_left = gt(Ax * fp.y + Bx * fp.x, Cx); + vec4 fx_up = gt(Ay * fp.y + By * fp.x, Cy); + +#ifdef CORNER_A + vec4 interp_restriction_lv1 = ne(e,f) * ne(e,h); +#endif +#ifdef CORNER_B + vec4 interp_restriction_lv1 = (ne(e,f) * ne(e,h) * (ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c))); +#endif +#ifdef CORNER_D + vec4 c1 = i4.yzwx; + vec4 g0 = i5.wxyz; + vec4 interp_restriction_lv1 = (ne(e,f) * ne(e,h) * (ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c) ) * (ne(f,f4) * ne(f,i) + ne(h,h5) * ne(h,i) + ne(h,g) + ne(f,c) + lt(b,c1) * lt(d,g0))); +#endif +#ifdef CORNER_C + vec4 interp_restriction_lv1 = (ne(e,f) * ne(e,h) * (ge(f,b) * ge(f,c) + ge(h,d) * ge(h,g) + lt(e,i) * (ge(f,f4) * ge(f,i4) + ge(h,h5) * ge(h,i5)) + lt(e,g) + lt(e,c))); +#endif + + interp_restriction_lv1 = clamp(interp_restriction_lv1, 0.0, 1.0); + + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 wd1 = weighted_distance(e, c, g, i, h5, f4, h, f); + vec4 wd2 = weighted_distance(h, d, i5, f, i4, b, e, i); + + vec4 one = vec4(1.0, 1.0, 1.0, 1.0); + vec4 zero = vec4(0.0, 0.0, 0.0, 0.0); + vec4 edri = le(wd1,wd2) * interp_restriction_lv1; + vec4 edr = lt(wd1,wd2) * interp_restriction_lv1 * ((one - edri.yzwx) + (one - edri.wxyz)); + vec4 edr_left = le(XBR_LV2_COEFFICIENT.xxxx * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr * ((one - edri.yzwx) * lt(e,c)); + vec4 edr_up = ge(df(f,g), XBR_LV2_COEFFICIENT.xxxx * df(h,c)) * interp_restriction_lv2_up * edr * ((one - edri.wxyz) * lt(e,g)); + + + vec4 nc = clamp(edr * (fx + edr_left * fx_left + edr_up * fx_up), 0.0, 1.0); + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res1 = nc.x > 0.0 ? px.x > 0.0 ? F.xyz : H.xyz : nc.y > 0.0 ? px.y > 0.0 ? B.xyz : F.xyz : nc.z > 0.0 ? px.z > 0.0 ? D.xyz : B.xyz : E.xyz; + vec3 res2 = nc.w > 0.0 ? px.w > 0.0 ? H.xyz : D.xyz : nc.z > 0.0 ? px.z > 0.0 ? D.xyz : B.xyz : nc.y > 0.0 ? px.y > 0.0 ? B.xyz : F.xyz : E.xyz; + + vec2 df12 = abs(mul(mat3(res1, res2, vec3(0.0, 0.0, 0.0)), Y.xyz).xy - e.xy); + + vec3 res_mix = (df12.y >= df12.x) ? vec3(1.0, 1.0, 1.0) : vec3(0.0, 0.0, 0.0); + vec3 res = mix(res1, res2, res_mix); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc new file mode 100644 index 00000000000..05cf1124896 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc @@ -0,0 +1,234 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3-noblend - Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 XBR_EQ_THRESHOLD; +uniform vec4 XBR_EQ_THRESHOLD2; +uniform vec4 XBR_LV2_COEFFICIENT; + +uniform vec4 u_tex_size0; + +SAMPLER2D(decal, 0); + +// Uncomment just one of the three params below to choose the corner detection +#define CORNER_A +//#define CORNER_B +//#define CORNER_C +//#define CORNER_D + +const vec4 Y = vec4(0.2126, 0.7152, 0.0722, 0.0); + +vec4 df(vec4 A, vec4 B) +{ + return abs(A - B); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 eq(vec4 A, vec4 B) +{ + return vec4(equal(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 gt(vec4 A, vec4 B) +{ + return vec4(greaterThan(A, B)); +} + +vec4 abslt2(vec4 A, vec4 B) +{ + return lt(df(A, B), XBR_EQ_THRESHOLD2.xxxx); +} + +vec4 absge(vec4 A, vec4 B) +{ + return ge(df(A, B), XBR_EQ_THRESHOLD.xxxx); +} + +vec4 absge2(vec4 A, vec4 B) +{ + return ge(df(A, B), XBR_EQ_THRESHOLD2.xxxx); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), Y); + vec4 c = mul(mat4(C, A, G, I), Y); + vec4 e = mul(mat4(E, E, E, E), Y); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), Y); + vec4 i5 = mul(mat4(I5, C4, A1, G0), Y); + vec4 h5 = mul(mat4(H5, F4, B1, D0), Y); + vec4 f4 = h5.yzwx; + + vec4 c4 = i5.yzwx; + vec4 g5 = i4.wxyz; + + vec4 c1 = i4.yzwx; + vec4 g0 = i5.wxyz; + vec4 b1 = h5.zwxy; + vec4 d0 = h5.wxyz; + + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + vec4 Az = vec4( 6.0, -2.0, -6.0, 2.0 ); + vec4 Bz = vec4( 2.0, 6.0, -2.0, -6.0 ); + vec4 Cz = vec4( 5.0, 3.0, -3.0, -1.0 ); + vec4 Aw = vec4( 2.0, -6.0, -2.0, 6.0 ); + vec4 Bw = vec4( 6.0, 2.0, -6.0,-2.0 ); + vec4 Cw = vec4( 5.0, -1.0, -3.0, 3.0 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = gt(Ao * fp.y + Bo * fp.x, Co); + vec4 fx_left = gt(Ax * fp.y + Bx * fp.x, Cx); + vec4 fx_up = gt(Ay * fp.y + By * fp.x, Cy); + vec4 fx3_left= gt(Az * fp.y + Bz * fp.x, Cz); + vec4 fx3_up = gt(Aw * fp.y + Bw * fp.x, Cw); + + vec4 interp_restriction_lv0 = (ne(e,f) * ne(e,h)); + + // It uses CORNER_C if none of the others are defined. +#ifdef CORNER_A + vec4 interp_restriction_lv1 = interp_restriction_lv0; +#elif CORNER_B + vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c))); +#elif CORNER_D + vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c)) * (ne(f,f4) * ne(f,i) + ne(h,h5) * ne(h,i) + ne(h,g) + ne(f,c) + lt(b,c1) * lt(d,g0))); +#elif CORNER_C + vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (ge(f,b) * ge(f,c) + ge(h,d) * ge(h,g) + lt(e,i) * (ge(f,f4) * ge(f,i4) + ge(h,h5) * ge(h,i5)) + lt(e,g) + lt(e,c))); +#endif + + interp_restriction_lv1 = clamp(interp_restriction_lv1, 0.0, 1.0); + + vec4 interp_restriction_lv2_left = ne(e,g) * ne(d,g); + vec4 interp_restriction_lv2_up = ne(e,c) * ne(b,c); + vec4 interp_restriction_lv3_left = abslt2(g,g0) * absge2(d0,g0); + vec4 interp_restriction_lv3_up = abslt2(c,c1) * absge2(b1,c1); + + vec4 wd1 = weighted_distance(e, c, g, i, h5, f4, h, f); + vec4 wd2 = weighted_distance(h, d, i5, f, i4, b, e, i); + + vec4 one = vec4(1.0, 1.0, 1.0, 1.0); + vec4 zero = vec4(0.0, 0.0, 0.0, 0.0); + vec4 edri = le(wd1,wd2) * interp_restriction_lv1; + vec4 edr = clamp(lt(wd1,wd2) * interp_restriction_lv1 * ((one - edri.yzwx) + (one - edri.wxyz)), 0.0, 1.0); + vec4 edr_left = le(XBR_LV2_COEFFICIENT.xxxx * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr * (one - edri.yzwx) * lt(e,c); + vec4 edr_up = ge(df(f,g), XBR_LV2_COEFFICIENT.xxxx * df(h,c)) * interp_restriction_lv2_up * edr * (one - edri.wxyz) * lt(e,g); + vec4 edr3_left = interp_restriction_lv3_left; + vec4 edr3_up = interp_restriction_lv3_up; + + vec4 nc = clamp((edr * fx + edr_left * (fx_left + edr3_left * fx3_left * lt(e,c4)) + edr_up * (fx_up + edr3_up * fx3_up * lt(e,g5))), 0.0, 1.0); + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res1 = nc.x > 0.0 ? px.x > 0.0 ? F.xyz : H.xyz : nc.y > 0.0 ? px.y > 0.0 ? B.xyz : F.xyz : nc.z > 0.0 ? px.z > 0.0 ? D.xyz : B.xyz : nc.w > 0.0 ? px.w > 0.0 ? H.xyz : D.xyz : E.xyz; + vec3 res2 = nc.w > 0.0 ? px.w > 0.0 ? H.xyz : D.xyz : nc.z > 0.0 ? px.z > 0.0 ? D.xyz : B.xyz : nc.y > 0.0 ? px.y > 0.0 ? B.xyz : F.xyz : nc.x > 0.0 ? px.x > 0.0 ? F.xyz : H.xyz : E.xyz; + + vec2 df12 = abs(mul(mat3(res1, res2, zero.xyz), Y.xyz).xy - e.xy); + + vec3 res = mix(res1, res2, (df12.y >= df12.x) ? one.xyz : zero.xyz); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3.sc new file mode 100644 index 00000000000..b2fd0d94714 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3.sc @@ -0,0 +1,254 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 XBR_Y_WEIGHT; +uniform vec4 XBR_EQ_THRESHOLD; +uniform vec4 XBR_EQ_THRESHOLD2; +uniform vec4 XBR_LV2_COEFFICIENT; + +uniform vec4 u_tex_size0; + +SAMPLER2D(decal, 0); + +const vec4 yuv = vec4(0.299, 0.587, 0.114, 0.0); +const vec4 delta = vec4(0.4, 0.4, 0.4, 0.4); + +vec4 df(vec4 A, vec4 B) +{ + return abs(A - B); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 eq(vec4 A, vec4 B) +{ + return vec4(equal(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 abslt(vec4 A, vec4 B) +{ + return lt(df(A, B), XBR_EQ_THRESHOLD.xxxx); +} + +vec4 abslt2(vec4 A, vec4 B) +{ + return lt(df(A, B), XBR_EQ_THRESHOLD2.xxxx); +} + +vec4 absge(vec4 A, vec4 B) +{ + return ge(df(A, B), XBR_EQ_THRESHOLD.xxxx); +} + +vec4 absge2(vec4 A, vec4 B) +{ + return ge(df(A, B), XBR_EQ_THRESHOLD2.xxxx); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), XBR_Y_WEIGHT.xxxx * yuv); + vec4 c = mul(mat4(C, A, G, I), XBR_Y_WEIGHT.xxxx * yuv); + vec4 e = mul(mat4(E, E, E, E), XBR_Y_WEIGHT.xxxx * yuv); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), XBR_Y_WEIGHT.xxxx * yuv); + vec4 i5 = mul(mat4(I5, C4, A1, G0), XBR_Y_WEIGHT.xxxx * yuv); + vec4 h5 = mul(mat4(H5, F4, B1, D0), XBR_Y_WEIGHT.xxxx * yuv); + vec4 f4 = h5.yzwx; + + vec4 c1 = i4.yzwx; + vec4 g0 = i5.wxyz; + vec4 b1 = h5.zwxy; + vec4 d0 = h5.wxyz; + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + vec4 Az = vec4( 6.0, -2.0, -6.0, 2.0 ); + vec4 Bz = vec4( 2.0, 6.0, -2.0, -6.0 ); + vec4 Cz = vec4( 5.0, 3.0, -3.0, -1.0 ); + vec4 Aw = vec4( 2.0, -6.0, -2.0, 6.0 ); + vec4 Bw = vec4( 6.0, 2.0, -6.0,-2.0 ); + vec4 Cw = vec4( 5.0, -1.0, -3.0, 3.0 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao * fp.y + Bo * fp.x); + vec4 fx_left = (Ax * fp.y + Bx * fp.x); + vec4 fx_up = (Ay * fp.y + By * fp.x); + vec4 fx3_left= (Az * fp.y + Bz * fp.x); + vec4 fx3_up = (Aw * fp.y + Bw * fp.x); + + vec4 interp_restriction_lv0 = (ne(e,f) * ne(e,h)); + +// It uses CORNER_C if none of the others are defined. +#ifdef CORNER_A + vec4 interp_restriction_lv1 = interp_restriction_lv0; +#elif CORNER_B + vec4 interp_restriction_lv1 = (interp_restriction_lv0 * ( ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c) ) ); +#elif CORNER_D + vec4 interp_restriction_lv1 = (interp_restriction_lv0 * ( ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c) ) * (f!=f4 * f!=i + h!=h5 * h!=i + h!=g + f!=c + lt(b,c1) * lt(d,g0))); +#else + vec4 interp_restriction_lv1 = (interp_restriction_lv0 * ( ge(f,b) * ge(f,c) + ge(h,d) * ge(h,g) + lt(e,i) * (ge(f,f4) * ge(f,i4) + ge(h,h5) * ge(h,i5)) + lt(e,g) + lt(e,c)) ); +#endif + + interp_restriction_lv1 = clamp(interp_restriction_lv1, 0.0, 1.0); + + vec4 interp_restriction_lv2_left = ne(e,g) * ne(d,g); + vec4 interp_restriction_lv2_up = ne(e,c) * ne(b,c); + vec4 interp_restriction_lv3_left = abslt2(g,g0) * absge2(d0,g0); + vec4 interp_restriction_lv3_up = abslt2(c,c1) * absge2(b1,c1); + + vec4 fx45 = smoothstep(Co - delta, Co + delta, fx); + vec4 fx30 = smoothstep(Cx - delta, Cx + delta, fx_left); + vec4 fx60 = smoothstep(Cy - delta, Cy + delta, fx_up); + vec4 fx15 = smoothstep(Cz - delta, Cz + delta, fx3_left); + vec4 fx75 = smoothstep(Cw - delta, Cw + delta, fx3_up); + + vec4 edr = lt(weighted_distance(e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(XBR_LV2_COEFFICIENT.xxxx * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), XBR_LV2_COEFFICIENT.xxxx * df(h,c)) * interp_restriction_lv2_up; + + vec4 edr3_left = interp_restriction_lv3_left; + vec4 edr3_up = interp_restriction_lv3_up; + + vec4 nc45 = edr * fx45; + vec4 nc30 = edr * edr_left * fx30; + vec4 nc60 = edr * edr_up * fx60; + vec4 nc15 = edr * edr_left * edr3_left * fx15; + vec4 nc75 = edr * edr_up * edr3_up * fx75; + + vec4 px = le(df(e,f), df(e,h)); + + vec4 nc = nc75 + nc15 + nc30 + nc60 + nc45; + + vec4 final45 = nc45 * fx45; + vec4 final30 = nc30 * fx30; + vec4 final60 = nc60 * fx60; + vec4 final15 = nc15 * fx15; + vec4 final75 = nc75 * fx75; + + vec4 maximo = max(max(max(final15, final75),max(final30, final60)), final45); + + float blend1; + vec3 pix1; + if (nc.x > 0.0) {pix1 = px.x > 0.0 ? F.xyz : H.xyz; blend1 = maximo.x;} + else if (nc.y > 0.0) {pix1 = px.y > 0.0 ? B.xyz : F.xyz; blend1 = maximo.y;} + else if (nc.z > 0.0) {pix1 = px.z > 0.0 ? D.xyz : B.xyz; blend1 = maximo.z;} + else if (nc.w > 0.0) {pix1 = px.w > 0.0 ? H.xyz : D.xyz; blend1 = maximo.w;} + + float blend2; + vec3 pix2; + if (nc.w > 0.0) {pix2 = px.w > 0.0 ? H.xyz : D.xyz; blend2 = maximo.w;} + else if (nc.z > 0.0) {pix2 = px.z > 0.0 ? D.xyz : B.xyz; blend2 = maximo.z;} + else if (nc.y > 0.0) {pix2 = px.y > 0.0 ? B.xyz : F.xyz; blend2 = maximo.y;} + else if (nc.x > 0.0) {pix2 = px.x > 0.0 ? F.xyz : H.xyz; blend2 = maximo.x;} + + vec3 res1 = mix(E.xyz, pix1, blend1); + vec3 res2 = mix(E.xyz, pix2, blend2); + + vec3 E_mix = (c_df(E.xyz, res2) >= c_df(E.xyz, res1)) ? vec3(1.0, 1.0, 1.0) : vec3(0.0, 0.0, 0.0); + vec3 res = mix(res1, res2, E_mix); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-noblend.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-noblend.sc new file mode 100644 index 00000000000..75541985e36 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-noblend.sc @@ -0,0 +1,59 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv2-noblend Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3-noblend.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3-noblend.sc new file mode 100644 index 00000000000..5421eaf2955 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3-noblend.sc @@ -0,0 +1,60 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3-noblend - Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3.sc new file mode 100644 index 00000000000..f4ee1f55ab3 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv3.sc @@ -0,0 +1,60 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR-lv3 - Shader + + Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.sc new file mode 100644 index 00000000000..533bfe0f762 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.sc @@ -0,0 +1,336 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.7c+ReverseAA (squared) Shader + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec3 gt3(vec3 A, vec3 B) +{ + return vec3(greaterThan(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * (ge_coeff(f,b) * ge_coeff(f,c) + ge_coeff(h,d) * ge_coeff(h,g) + lt_coeff(e,i) * (ge_coeff(f,f4) * ge_coeff(f,i4) + ge_coeff(h,h5) * ge_coeff(h,i5)) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 edr = lt(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 px = le(df(e,f), df(e,h)); + + vec4 P[4]; + P[0] = px.x > 0.0 ? F : H; + P[1] = px.y > 0.0 ? B : F; + P[2] = px.z > 0.0 ? D : B; + P[3] = px.w > 0.0 ? H : D; + + vec4 res = E; + + vec3 threshold = vec3(0.8, 0.42, 0.29); + vec3 xx = vec3(0.0, 0.0, 0.0); + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + vec3 sim1 = gt3(abs(bb) * 2.0, threshold) + gt3(abs(cc) * 2.0, threshold); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + vec3 sim2 = gt3(abs(bb) * 2.0, threshold) + gt3(abs(cc) * 2.0, threshold); + t = clamp(t, -m, m); + + vec3 s0 = (2.0 * fp.x - 1.0) * t + s; + + res = vec4(s0, 1.0); + + if ((sim1.x > 0.0 || sim1.y > 0.0 || sim1.z > 0.0) && (sim2.x > 0.0 || sim2.y > 0.0 || sim2.z > 0.0)) + { + if (fp.x >= 0.5) + { + if (fp.y >= 0.5) + { + if (edr.x > 0.0 && edr_left.x > 0.0 && edr_up.x > 0.0) + { + res = mix(E , P[0], 0.833333); + } + else if (edr.x > 0.0 && (edr_left.x > 0.0 || edr_up.x > 0.0)) + { + res = mix(E , P[0], 0.75); + } + else if (edr.y > 0.0 && edr_left.y > 0.0 && edr.w > 0.0 && edr_up.w > 0.0) + { + res = mix(E , P[1], 0.25); + res = mix(E , P[3], 0.25); + } + else if (edr.y > 0.0 && edr_left.y > 0.0) + { + res = mix(E , P[1], 0.25); + } + else if (edr.w > 0.0 && edr_up.w > 0.0) + { + res = mix(E , P[3], 0.25); + } + else if (edr.x > 0.0) + { + res = mix(E , P[0], 0.5); + } + } + else + { + if (edr.y > 0.0 && edr_left.y > 0.0 && edr_up.y > 0.0) + { + res = mix(E , P[1], 0.833333); + } + else if (edr.y > 0.0 && (edr_left.y > 0.0 || edr_up.y > 0.0)) + { + res = mix(E , P[1], 0.75); + } + else if (edr.z > 0.0 && edr_left.z > 0.0 && edr.x > 0.0 && edr_up.x > 0.0) + { + res = mix(E , P[2], 0.25); + res = mix(E , P[0], 0.25); + } + else if (edr.z > 0.0 && edr_left.z > 0.0) + { + res = mix(E , P[2], 0.25); + } + else if (edr.x > 0.0 && edr_up.x > 0.0) + { + res = mix(E , P[0], 0.25); + } + else if (edr.y > 0.0) + { + res = mix(E , P[1], 0.5); + } + } + } + else + { + if (fp.y >= 0.5) + { + if (edr.w > 0.0 && edr_left.w > 0.0 && edr_up.w > 0.0) + { + res = mix(E , P[3], 0.833333); + } + else if (edr.w > 0.0 && (edr_left.w > 0.0 || edr_up.w > 0.0)) + { + res = mix(E , P[3], 0.75); + } + else if (edr.x > 0.0 && edr_left.x > 0.0 && edr.z > 0.0 && edr_up.z > 0.0) + { + res = mix(E , P[0], 0.25); + res = mix(E , P[2], 0.25); + } + else if (edr.x > 0.0 && edr_left.x > 0.0) + { + res = mix(E , P[0], 0.25); + } + else if (edr.z > 0.0 && edr_up.z > 0.0) + { + res = mix(E , P[2], 0.25); + } + else if (edr.w > 0.0) + { + res = mix(E , P[3], 0.5); + } + } + else + { + if (edr.z > 0.0 && edr_left.z > 0.0 && edr_up.z > 0.0) + { + res = mix(E , P[2], 0.833333); + } + else if (edr.z > 0.0 && (edr_left.z > 0.0 || edr_up.z > 0.0)) + { + res = mix(E , P[2], 0.75); + } + else if (edr.w > 0.0 && edr_left.w > 0.0 && edr.y > 0.0 && edr_up.y > 0.0) + { + res = mix(E , P[3], 0.25); + res = mix(E , P[1], 0.25); + } + else if (edr.w > 0.0 && edr_left.w > 0.0) + { + res = mix(E , P[3], 0.25); + } + else if (edr.y > 0.0 && edr_up.y > 0.0) + { + res = mix(E , P[1], 0.25); + } + else if (edr.z > 0.0) + { + res = mix(E, P[2], 0.5); + } + } + } + } + + gl_FragColor = vec4(res.xyz, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.sc new file mode 100644 index 00000000000..ea58584408b --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.sc @@ -0,0 +1,265 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta1 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 delta = vec4(0.5, 0.5, 0.5, 0.5); + +// Constants used with gamma correction. +#define InputGamma 2.4 +#define OutputGamma 2.2 + +#define GAMMA_IN(color) pow(color, vec3(InputGamma, InputGamma, InputGamma)) +#define GAMMA_OUT(color) pow(color, vec3(1.0 / OutputGamma, 1.0 / OutputGamma, 1.0 / OutputGamma)) + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 lt_coeff2(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ge_coeff2(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec3 gt3(vec3 A, vec3 B) +{ + return vec3(greaterThan(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 a = c.yzwx; + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * ((lt_coeff2(e,b) + lt_coeff2(e,d) + ge_coeff2(e,a)) * (lt_coeff2(f,f4) + lt_coeff2(f,c) + lt_coeff2(h,h5) + lt_coeff2(h,g))) * ( ge_coeff(f,b) * ge_coeff(f,c) + ge_coeff(h,d) * ge_coeff(h,g) + lt_coeff(e,i) * (ge_coeff(f,f4) * ge_coeff(f,i4) + ge_coeff(h,h5) * ge_coeff(h,i5)) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 fx45 = smoothstep(Co - delta, Co + delta, fx); + vec4 fx30 = smoothstep(Cx - delta, Cx + delta, fx_left); + vec4 fx60 = smoothstep(Cy - delta, Cy + delta, fx_up); + + vec4 edr = lt((weighted_distance(e, c, g, i, h5, f4, h, f) + 3.5), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 nc45 = edr * fx45; + vec4 nc30 = edr * edr_left * fx30; + vec4 nc60 = edr * edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res = E.xyz; + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + t = clamp(t, -m, m); + + res = (2.0 * fp.x - 1.0) * t + s; + + vec4 nc = clamp(nc30 + nc60 + nc45, 0.0, 1.0); + + float blend = 0.0; + vec3 pix = res; + + float final45 = dot(nc45, fx45); + float final30 = dot(nc30, fx30); + float final60 = dot(nc60, fx60); + + float maximo = max(max(final30, final60), final45); + + if (nc.x > 0.0) {pix = px.x > 0.0 ? F.xyz : H.xyz; blend = maximo;} + else if (nc.y > 0.0) {pix = px.y > 0.0 ? B.xyz : F.xyz; blend = maximo;} + else if (nc.z > 0.0) {pix = px.z > 0.0 ? D.xyz : B.xyz; blend = maximo;} + else if (nc.w > 0.0) {pix = px.w > 0.0 ? H.xyz : D.xyz; blend = maximo;} + + res = GAMMA_IN(res); + pix = GAMMA_IN(pix); + + res = mix(res, pix, blend); + + gl_FragColor = vec4(clamp(GAMMA_OUT(res), 0.0, 1.0), 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.sc new file mode 100644 index 00000000000..a4e59937d54 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.sc @@ -0,0 +1,255 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - Dithering preserved + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 delta = vec4(0.5, 0.5, 0.5, 0.5); + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 lt_coeff2(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ge_coeff2(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec3 gt3(vec3 A, vec3 B) +{ + return vec3(greaterThan(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 a = c.yzwx; + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * ((lt_coeff2(e,b) + lt_coeff2(e,d) + ge_coeff2(e,a)) * (lt_coeff2(f,f4) + lt_coeff2(f,c) + lt_coeff2(h,h5) + lt_coeff2(h,g))) * ( ge_coeff(f,b) * ge_coeff(f,c) + ge_coeff(h,d) * ge_coeff(h,g) + lt_coeff(e,i) * (ge_coeff(f,f4) * ge_coeff(f,i4) + ge_coeff(h,h5) * ge_coeff(h,i5)) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 fx45 = smoothstep(Co - delta, Co + delta, fx); + vec4 fx30 = smoothstep(Cx - delta, Cx + delta, fx_left); + vec4 fx60 = smoothstep(Cy - delta, Cy + delta, fx_up); + + vec4 edr = lt((weighted_distance(e, c, g, i, h5, f4, h, f) + 3.5), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 nc45 = edr * fx45; + vec4 nc30 = edr * edr_left * fx30; + vec4 nc60 = edr * edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res = E.xyz; + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + t = clamp(t, -m, m); + + res = (2.0 * fp.x - 1.0) * t + s; + + vec4 nc = clamp(nc30 + nc60 + nc45, 0.0, 1.0); + + float blend = 0.0; + vec3 pix = res; + + float final45 = dot(nc45, fx45); + float final30 = dot(nc30, fx30); + float final60 = dot(nc60, fx60); + + float maximo = max(max(final30, final60), final45); + + if (nc.x > 0.0) {pix = px.x > 0.0 ? F.xyz : H.xyz; blend = maximo;} + else if (nc.y > 0.0) {pix = px.y > 0.0 ? B.xyz : F.xyz; blend = maximo;} + else if (nc.z > 0.0) {pix = px.z > 0.0 ? D.xyz : B.xyz; blend = maximo;} + else if (nc.w > 0.0) {pix = px.w > 0.0 ? H.xyz : D.xyz; blend = maximo;} + + res = mix(res, pix, blend); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.sc new file mode 100644 index 00000000000..254e8d878cb --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.sc @@ -0,0 +1,281 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta3 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 delta = vec4(0.5, 0.5, 0.5, 0.5); +const float sharpness = 0.65; + +// Constants used with gamma correction. +#define InputGamma 2.4 +#define OutputGamma 2.2 + +#define GAMMA_IN(color) pow(color, vec3(InputGamma, InputGamma, InputGamma)) +#define GAMMA_OUT(color) pow(color, vec3(1.0 / OutputGamma, 1.0 / OutputGamma, 1.0 / OutputGamma)) + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 lt_coeff2(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ge_coeff2(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec3 gt3(vec3 A, vec3 B) +{ + return vec3(greaterThan(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 a = c.yzwx; + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * (ge_coeff(f,b) * ge_coeff(f,c) + ge_coeff(h,d) * ge_coeff(h,g) + lt_coeff(e,i) * (ge_coeff(f,f4) * ge_coeff(f,i4) + ge_coeff(h,h5) * ge_coeff(h,i5)) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 fx45 = smoothstep(Co - delta, Co + delta, fx); + vec4 fx30 = smoothstep(Cx - delta, Cx + delta, fx_left); + vec4 fx60 = smoothstep(Cy - delta, Cy + delta, fx_up); + + vec4 edr = lt((weighted_distance(e, c, g, i, h5, f4, h, f) + 3.5), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 nc45 = edr * fx45; + vec4 nc30 = edr * edr_left * fx30; + vec4 nc60 = edr * edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res = E.xyz; + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s0 = (2.0 * fp.x - 1.0) * t + s; + + vec4 nc = clamp(nc30 + nc60 + nc45, 0.0, 1.0); + + float blend1 = 0.0; + float blend2 = 0.0; + + vec4 final45 = nc45 * fx45; + vec4 final30 = nc30 * fx30; + vec4 final60 = nc60 * fx60; + + vec4 maximo = max(max(final30, final60), final45); + + vec3 pix1 = vec3(0.0, 0.0, 0.0); + if (nc.x > 0.0) {pix1 = px.x > 0.0 ? F.xyz : H.xyz; blend1 = maximo.x;} + else if (nc.y > 0.0) {pix1 = px.y > 0.0 ? B.xyz : F.xyz; blend1 = maximo.y;} + else if (nc.z > 0.0) {pix1 = px.z > 0.0 ? D.xyz : B.xyz; blend1 = maximo.z;} + else if (nc.w > 0.0) {pix1 = px.w > 0.0 ? H.xyz : D.xyz; blend1 = maximo.w;} + + vec3 pix2 = vec3(0.0, 0.0, 0.0); + if (nc.w > 0.0) {pix2 = px.w > 0.0 ? H.xyz : D.xyz; blend2 = maximo.w;} + else if (nc.z > 0.0) {pix2 = px.z > 0.0 ? D.xyz : B.xyz; blend2 = maximo.z;} + else if (nc.y > 0.0) {pix2 = px.y > 0.0 ? B.xyz : F.xyz; blend2 = maximo.y;} + else if (nc.x > 0.0) {pix2 = px.x > 0.0 ? F.xyz : H.xyz; blend2 = maximo.x;} + + E.xyz = GAMMA_IN(E.xyz); + s0 = GAMMA_IN(s0); + + vec3 res1 = mix(s0, GAMMA_IN(pix1), blend1); + vec3 res2 = mix(s0, GAMMA_IN(pix2), blend2); + + res = mix(res1, res2, step(c_df(E.xyz, res1), c_df(E.xyz, res2))); + + gl_FragColor = vec4(clamp(GAMMA_OUT(res), 0.0, 1.0), 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.sc new file mode 100644 index 00000000000..e3791fed702 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.sc @@ -0,0 +1,271 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - v4 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 delta = vec4(0.5, 0.5, 0.5, 0.5); +const float sharpness = 0.65; + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 lt_coeff2(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ge_coeff2(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec3 gt3(vec3 A, vec3 B) +{ + return vec3(greaterThan(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 a = c.yzwx; + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * (ge_coeff(f,b) * ge_coeff(f,c) + ge_coeff(h,d) * ge_coeff(h,g) + lt_coeff(e,i) * (ge_coeff(f,f4) * ge_coeff(f,i4) + ge_coeff(h,h5) * ge_coeff(h,i5)) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 fx45 = smoothstep(Co - delta, Co + delta, fx); + vec4 fx30 = smoothstep(Cx - delta, Cx + delta, fx_left); + vec4 fx60 = smoothstep(Cy - delta, Cy + delta, fx_up); + + vec4 edr = lt((weighted_distance(e, c, g, i, h5, f4, h, f) + 3.5), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 nc45 = edr * fx45; + vec4 nc30 = edr * edr_left * fx30; + vec4 nc60 = edr * edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res = E.xyz; + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s0 = (2.0 * fp.x - 1.0) * t + s; + + vec4 nc = clamp(nc30 + nc60 + nc45, 0.0, 1.0); + + float blend1 = 0.0; + float blend2 = 0.0; + + vec4 final45 = nc45 * fx45; + vec4 final30 = nc30 * fx30; + vec4 final60 = nc60 * fx60; + + vec4 maximo = max(max(final30, final60), final45); + + vec3 pix1 = vec3(0.0, 0.0, 0.0); + if (nc.x > 0.0) {pix1 = px.x > 0.0 ? F.xyz : H.xyz; blend1 = maximo.x;} + else if (nc.y > 0.0) {pix1 = px.y > 0.0 ? B.xyz : F.xyz; blend1 = maximo.y;} + else if (nc.z > 0.0) {pix1 = px.z > 0.0 ? D.xyz : B.xyz; blend1 = maximo.z;} + else if (nc.w > 0.0) {pix1 = px.w > 0.0 ? H.xyz : D.xyz; blend1 = maximo.w;} + + vec3 pix2 = vec3(0.0, 0.0, 0.0); + if (nc.w > 0.0) {pix2 = px.w > 0.0 ? H.xyz : D.xyz; blend2 = maximo.w;} + else if (nc.z > 0.0) {pix2 = px.z > 0.0 ? D.xyz : B.xyz; blend2 = maximo.z;} + else if (nc.y > 0.0) {pix2 = px.y > 0.0 ? B.xyz : F.xyz; blend2 = maximo.y;} + else if (nc.x > 0.0) {pix2 = px.x > 0.0 ? F.xyz : H.xyz; blend2 = maximo.x;} + + vec3 res1 = mix(s0, pix1, blend1); + vec3 res2 = mix(s0, pix2, blend2); + + res = mix(res1, res2, step(c_df(E.xyz, res1), c_df(E.xyz, res2))); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.sc new file mode 100644 index 00000000000..858342d25c6 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.sc @@ -0,0 +1,256 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8b+ReverseAA (semi-rounded) Shader - v4 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 delta = vec4(0.5, 0.5, 0.5, 0.5); +const float sharpness = 0.65; + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 a = c.yzwx; + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * (ge_coeff(f,b) * ge_coeff(h,d) + lt_coeff(e,i) * ge_coeff(f,i4) * ge_coeff(h,i5) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 fx45 = smoothstep(Co - delta, Co + delta, fx); + vec4 fx30 = smoothstep(Cx - delta, Cx + delta, fx_left); + vec4 fx60 = smoothstep(Cy - delta, Cy + delta, fx_up); + + vec4 edr = lt((weighted_distance(e, c, g, i, h5, f4, h, f) + 3.5), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 nc45 = edr * fx45; + vec4 nc30 = edr * edr_left * fx30; + vec4 nc60 = edr * edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res = E.xyz; + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s0 = (2.0 * fp.x - 1.0) * t + s; + + vec4 nc = clamp(nc30 + nc60 + nc45, 0.0, 1.0); + + float blend1 = 0.0; + float blend2 = 0.0; + + vec4 final45 = nc45 * fx45; + vec4 final30 = nc30 * fx30; + vec4 final60 = nc60 * fx60; + + vec4 maximo = max(max(final30, final60), final45); + + vec3 pix1 = vec3(0.0, 0.0, 0.0); + if (nc.x > 0.0) {pix1 = px.x > 0.0 ? F.xyz : H.xyz; blend1 = maximo.x;} + else if (nc.y > 0.0) {pix1 = px.y > 0.0 ? B.xyz : F.xyz; blend1 = maximo.y;} + else if (nc.z > 0.0) {pix1 = px.z > 0.0 ? D.xyz : B.xyz; blend1 = maximo.z;} + else if (nc.w > 0.0) {pix1 = px.w > 0.0 ? H.xyz : D.xyz; blend1 = maximo.w;} + + vec3 pix2 = vec3(0.0, 0.0, 0.0); + if (nc.w > 0.0) {pix2 = px.w > 0.0 ? H.xyz : D.xyz; blend2 = maximo.w;} + else if (nc.z > 0.0) {pix2 = px.z > 0.0 ? D.xyz : B.xyz; blend2 = maximo.z;} + else if (nc.y > 0.0) {pix2 = px.y > 0.0 ? B.xyz : F.xyz; blend2 = maximo.y;} + else if (nc.x > 0.0) {pix2 = px.x > 0.0 ? F.xyz : H.xyz; blend2 = maximo.x;} + + vec3 res1 = mix(s0, pix1, blend1); + vec3 res2 = mix(s0, pix2, blend2); + + res = mix(res1, res2, step(c_df(E.xyz, res1), c_df(E.xyz, res2))); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.sc new file mode 100644 index 00000000000..1a4ad25e765 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.sc @@ -0,0 +1,288 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta3 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 delta = vec4(0.5, 0.5, 0.5, 0.5); +const float sharpness = 0.65; + +// Constants used with gamma correction. +#define InputGamma 2.4 +#define OutputGamma 2.2 + +#define GAMMA_IN(color) pow(color, vec3(InputGamma, InputGamma, InputGamma)) +#define GAMMA_OUT(color) pow(color, vec3(1.0 / OutputGamma, 1.0 / OutputGamma, 1.0 / OutputGamma)) + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 lt_coeff2(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 lt_coeff3(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(5.0, 5.0, 5.0, 5.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec3 gt3(vec3 A, vec3 B) +{ + return vec3(greaterThan(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 a = c.yzwx; + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * (ge_coeff(f,b) * ge_coeff(f,c) + ge_coeff(h,d) * ge_coeff(h,g) + lt_coeff(e,i) * (ge_coeff(f,f4) * ge_coeff(f,i4) + ge_coeff(h,h5) * ge_coeff(h,i5)) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 fx45 = smoothstep(Co - delta, Co + delta, fx); + vec4 fx30 = smoothstep(Cx - delta, Cx + delta, fx_left); + vec4 fx60 = smoothstep(Cy - delta, Cy + delta, fx_up); + + vec4 edr = lt((weighted_distance(e, c, g, i, h5, f4, h, f) + 3.5), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 nc45 = edr * fx45; + vec4 nc30 = edr * edr_left * fx30; + vec4 nc60 = edr * edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec3 res = E.xyz; + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, sharpness * abs(bb)); + m = min(m, sharpness * abs(cc)); + t = clamp(t, -m, m); + + vec3 s0 = (2.0 * fp.x - 1.0) * t + s; + + vec4 nc = clamp(nc30 + nc60 + nc45, 0.0, 1.0); + + float blend = 0.0; + + vec4 r1 = mix(e, f, edr); + + vec4 yeseq3 = vec4(0.0, 0.0, 0.0, 0.0); + + vec3 pix; + vec4 lt_res = lt_coeff3(r1,e); + if (lt_res.x > 0.0 && lt_res.y > 0.0 && lt_res.z > 0.0) + { + yeseq3 = vec4(1.0, 1.0, 1.0, 1.0); + pix = res = s0; + } + else + { + pix = res = E.xyz; + } + + vec4 yes = (yeseq3 * lt_coeff2(e, mix(f, h, px))); + + vec4 final45 = nc45 * fx45; + vec4 final30 = nc30 * fx30; + vec4 final60 = nc60 * fx60; + + vec4 maximo = max(max(final30, final60), final45); + + if (nc.x > 0.0) {pix = px.x > 0.0 ? F.xyz : H.xyz; blend = maximo.x; if (yes.x > 0.0) pix = res = s0; else res = E.xyz;} + else if (nc.y > 0.0) {pix = px.y > 0.0 ? B.xyz : F.xyz; blend = maximo.y; if (yes.y > 0.0) pix = res = s0; else res = E.xyz;} + else if (nc.z > 0.0) {pix = px.z > 0.0 ? D.xyz : B.xyz; blend = maximo.z; if (yes.z > 0.0) pix = res = s0; else res = E.xyz;} + else if (nc.w > 0.0) {pix = px.w > 0.0 ? H.xyz : D.xyz; blend = maximo.w; if (yes.w > 0.0) pix = res = s0; else res = E.xyz;} + + res = GAMMA_IN(res); + pix = GAMMA_IN(pix); + + res = mix(res, pix, blend); + + gl_FragColor = vec4(clamp(GAMMA_OUT(res), 0.0, 1.0), 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.sc new file mode 100644 index 00000000000..bf3af2de385 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.sc @@ -0,0 +1,341 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.7c+ReverseAA (squared) Shader + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 u_tex_size0; + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +vec4 lt_coeff(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ge_coeff(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), vec4(15.0, 15.0, 15.0, 15.0))); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec3 lt3(vec3 A, vec3 B) +{ + return vec3(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec3 le3(vec3 A, vec3 B) +{ + return vec3(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec3 gt3(vec3 A, vec3 B) +{ + return vec3(greaterThan(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 interp_restriction_lv1 = clamp((ne(e,f) * ne(e,h) * (ge_coeff(f,b) * ge_coeff(f,c) + ge_coeff(h,d) * ge_coeff(h,g) + lt_coeff(e,i) * (ge_coeff(f,f4) * ge_coeff(f,i4) + ge_coeff(h,h5) * ge_coeff(h,i5)) + lt_coeff(e,g) + lt_coeff(e,c))), 0.0, 1.0); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 edr = lt(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up; + + vec4 px = le(df(e,f), df(e,h)); + + vec4 P[4]; + P[0] = px.x > 0.0 ? F : H; + P[1] = px.y > 0.0 ? B : F; + P[2] = px.z > 0.0 ? D : B; + P[3] = px.w > 0.0 ? H : D; + + vec4 res = E; + + vec3 threshold = vec3(0.4, 0.4, 0.4); + vec3 xx = vec3(0.0, 0.0, 0.0); + + vec3 n1 = B1.xyz; + vec3 n2 = B.xyz; + vec3 s = E.xyz; + vec3 n3 = H.xyz; + vec3 n4 = H5.xyz; + + vec3 aa = n2 - n1; + vec3 bb = s - n2; + vec3 cc = n3 - s; + vec3 dd = n4 - n3; + + vec3 t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + vec3 m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + vec3 sim1 = (gt3(abs(bb) * 2.0, threshold) + gt3(abs(cc) * 2.0, threshold) + le3(abs(bb) * 2.0, xx) + le3(abs(cc) * 2.0, xx)); + t = clamp(t, -m, m); + + vec3 s1 = (2.0 * fp.y - 1.0) * t + s; + + n1 = D0.xyz; + n2 = D.xyz; + s = s1; + n3 = F.xyz; + n4 = F4.xyz; + + aa = n2 - n1; + bb = s - n2; + cc = n3 - s; + dd = n4 - n3; + + t = (7.0 * (bb + cc) - 3.0 * (aa + dd)) / 16.0; + m = mix(2.0 * (1.0 - s), 2.0 * s, lt3(s, vec3(0.5, 0.5, 0.5))); + + m = min(m, 2.0 * abs(bb)); + m = min(m, 2.0 * abs(cc)); + vec3 sim2 = (gt3(abs(bb) * 2.0, threshold) + gt3(abs(cc) * 2.0, threshold) + le3(abs(bb) * 2.0, xx) + le3(abs(cc) * 2.0, xx)); + t = clamp(t, -m, m); + + vec3 s0 = (2.0 * fp.x - 1.0) * t + s; + + res = vec4(s0, 1.0); + + if ((sim1.x > 0.0 || sim1.y > 0.0 || sim1.z > 0.0) && (sim2.x > 0.0 || sim2.y > 0.0 || sim2.z > 0.0)) + { + if (fp.x >= 0.5) + { + if (fp.y >= 0.5) + { + if (edr.x > 0.0 && edr_left.x > 0.0 && edr_up.x > 0.0) + { + res = mix(E , P[0], 0.833333); + } + else if (edr.x > 0.0 && (edr_left.x > 0.0 || edr_up.x > 0.0)) + { + res = mix(E , P[0], 0.75); + } + else if (edr.y > 0.0 && edr_left.y > 0.0 && edr.w > 0.0 && edr_up.w > 0.0) + { + res = mix(E , P[1], 0.25); + res = mix(E , P[3], 0.25); + } + else if (edr.y > 0.0 && edr_left.y > 0.0) + { + res = mix(E , P[1], 0.25); + } + else if (edr.w > 0.0 && edr_up.w > 0.0) + { + res = mix(E , P[3], 0.25); + } + else if (edr.x > 0.0) + { + res = mix(E , P[0], 0.5); + } + } + else + { + if (edr.y > 0.0 && edr_left.y > 0.0 && edr_up.y > 0.0) + { + res = mix(E , P[1], 0.833333); + } + else if (edr.y > 0.0 && (edr_left.y > 0.0 || edr_up.y > 0.0)) + { + res = mix(E , P[1], 0.75); + } + else if (edr.z > 0.0 && edr_left.z > 0.0 && edr.x > 0.0 && edr_up.x > 0.0) + { + res = mix(E , P[2], 0.25); + res = mix(E , P[0], 0.25); + } + else if (edr.z > 0.0 && edr_left.z > 0.0) + { + res = mix(E , P[2], 0.25); + } + else if (edr.x > 0.0 && edr_up.x > 0.0) + { + res = mix(E , P[0], 0.25); + } + else if (edr.y > 0.0) + { + res = mix(E , P[1], 0.5); + } + } + } + else + { + if (fp.y >= 0.5) + { + if (edr.w > 0.0 && edr_left.w > 0.0 && edr_up.w > 0.0) + { + res = mix(E , P[3], 0.833333); + } + else if (edr.w > 0.0 && (edr_left.w > 0.0 || edr_up.w > 0.0)) + { + res = mix(E , P[3], 0.75); + } + else if (edr.x > 0.0 && edr_left.x > 0.0 && edr.z > 0.0 && edr_up.z > 0.0) + { + res = mix(E , P[0], 0.25); + res = mix(E , P[2], 0.25); + } + else if (edr.x > 0.0 && edr_left.x > 0.0) + { + res = mix(E , P[0], 0.25); + } + else if (edr.z > 0.0 && edr_up.z > 0.0) + { + res = mix(E , P[2], 0.25); + } + else if (edr.w > 0.0) + { + res = mix(E , P[3], 0.5); + } + } + else + { + if (edr.z > 0.0 && edr_left.z > 0.0 && edr_up.z > 0.0) + { + res = mix(E , P[2], 0.833333); + } + else if (edr.z > 0.0 && (edr_left.z > 0.0 || edr_up.z > 0.0)) + { + res = mix(E , P[2], 0.75); + } + else if (edr.w > 0.0 && edr_left.w > 0.0 && edr.y > 0.0 && edr_up.y > 0.0) + { + res = mix(E , P[3], 0.25); + res = mix(E , P[1], 0.25); + } + else if (edr.w > 0.0 && edr_left.w > 0.0) + { + res = mix(E , P[3], 0.25); + } + else if (edr.y > 0.0 && edr_up.y > 0.0) + { + res = mix(E , P[1], 0.25); + } + else if (edr.z > 0.0) + { + res = mix(E, P[2], 0.5); + } + } + } + } + + gl_FragColor = vec4(res.xyz, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/varying.def.sc similarity index 71% rename from src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/varying.def.sc index c65b5426733..92c3034f498 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-lv1-noblend/varying.def.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/varying.def.sc @@ -4,6 +4,9 @@ vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord5 : TEXCOORD5 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord6 : TEXCOORD6 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord7 : TEXCOORD7 = 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/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.sc new file mode 100644 index 00000000000..339c44e284c --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.7c+ReverseAA (squared) Shader + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.sc new file mode 100644 index 00000000000..9d5468107dd --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta1 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.sc new file mode 100644 index 00000000000..8e73b14f713 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - Dithering preserved + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.sc new file mode 100644 index 00000000000..b4509adf38c --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta3 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.sc new file mode 100644 index 00000000000..b00c03fbce3 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - v4 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.sc new file mode 100644 index 00000000000..2a33ced4126 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8b+ReverseAA (semi-rounded) Shader - v4 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.sc new file mode 100644 index 00000000000..b4509adf38c --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.8c+ReverseAA (squared) Shader - beta3 + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.sc new file mode 100644 index 00000000000..339c44e284c --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.sc @@ -0,0 +1,72 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:GPL-2.0+ +// copyright-holders:Hyllian + +/* + Hyllian's 2xBR v3.7c+ReverseAA (squared) Shader + + Copyright (C) 2011/2012 Hyllian/Jararaca - sergiogdb@gmail.com +*/ + +/* + * ReverseAA part of the code + * + * Copyright (c) 2012, Christoph Feck + * All Rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + // This line fix a bug in ATI cards. + vec2 texCoord = a_texcoord0 + vec2(0.0000001, 0.0000001); + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.sc new file mode 100644 index 00000000000..5af6ea86cc4 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.sc @@ -0,0 +1,159 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 A (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +#define round(X) floor((X)+0.5) + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const float y_weight = 48.0; +const float u_weight = 7.0; +const float v_weight = 6.0; +const mat4 yuv = mat4( + 0.299, 0.587, 0.114, 0.0, + -0.169, -0.331, 0.499, 0.0, + 0.499, -0.418, -0.0813, 0.0, + 0.0, 0.0, 0.0, 0.0 +); + +const mat4 yuv_weighted = mat4( + 48.0 * vec4( 0.299, 0.587, 0.114, 0.0), + 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), + 6.0 * vec4( 0.499, -0.418, -0.0813, 0.0), + 0.0 * vec4( 0.0, 0.0, 0.0, 0.0) +); +const vec4 delta = vec4(0.4, 0.4, 0.4, 0.4); + +vec3 remapTo01(vec3 v, vec3 low, vec3 high) +{ + return saturate((v - low) / (high-low)); +} + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 interp_restriction_lv1 = (ne(e,f) * ne(e,h)); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + vec4 edr = lt(weighted_distance(e, c, g, i, h5, f4, h, f), weighted_distance(h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up * edr; + + vec3 info; + + info.x = dot(edr, vec4(8.0, 4.0, 2.0, 1.0)); + info.y = dot(edr_left, vec4(8.0, 4.0, 2.0, 1.0)); + info.z = dot(edr_up, vec4(8.0, 4.0, 2.0, 1.0)); + + gl_FragColor = vec4(remapTo01(info, vec3(0.0, 0.0, 0.0), vec3(255.0, 255.0, 255.0)), 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.sc new file mode 100644 index 00000000000..668922ec18c --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.sc @@ -0,0 +1,174 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 Accuracy - pass0 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +uniform vec4 XBR_EQ_THRESHOLD; +uniform vec4 XBR_LV2_COEFFICIENT; + +#define XBR_RED_COEF 17.0 +#define XBR_GREEN_COEF 20.0 +#define XBR_BLUE_COEF 3.0 + +#define coef XBR_LV2_COEFFICIENT.xxxx + +const vec4 dtt = vec4(65536.0, 256.0, 1.0, 0.0); + +vec4 remapTo01(vec4 v, vec4 low, vec4 high) +{ + return saturate((v - low)/(high-low)); +} + +float df1(vec4 A, vec4 B) +{ + float rmean = (A.r + B.r) / 2.0; + vec4 diff = A - B; + vec4 K = vec4(XBR_RED_COEF + rmean, XBR_GREEN_COEF, XBR_BLUE_COEF - rmean, 0.0); + + return sqrt(dot(K * diff, diff)); +} + +vec4 df(mat4 A, mat4 B) +{ + return vec4(df1(A[0],B[0]), df1(A[1],B[1]), df1(A[2],B[2]), df1(A[3],B[3])); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 lt4(mat4 A, mat4 B) +{ + return vec4(lessThan(df(A, B), XBR_EQ_THRESHOLD.xxxx)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(mat4 a, mat4 b, mat4 c, mat4 d, mat4 e, mat4 f, mat4 g, mat4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b_ = mul(mat4(B, D, H, F), dtt); + vec4 c_ = mul(mat4(C, A, G, I), dtt); + vec4 e_ = mul(mat4(E, E, E, E), dtt); + vec4 d_ = b_.yzwx; + vec4 f_ = b_.wxyz; + vec4 g_ = c_.zwxy; + vec4 h_ = b_.zwxy; + vec4 i_ = c_.wxyz; + + vec4 i4_ = mul(mat4(I4, C1, A0, G5), dtt); + vec4 i5_ = mul(mat4(I5, C4, A1, G0), dtt); + vec4 h5_ = mul(mat4(H5, F4, B1, D0), dtt); + vec4 f4_ = h5_.yzwx; + + mat4 b = mat4(B, D, H, F); + mat4 c = mat4(C, A, G, I); + mat4 e = mat4(E, E, E, E); + mat4 d = mat4(D, H, F, B); + mat4 f = mat4(F, B, D, H); + mat4 g = mat4(G, I, C, A); + mat4 h = mat4(H, F, B, D); + mat4 i = mat4(I, C, A, G); + + mat4 i4 = mat4(I4, C1, A0, G5); + mat4 i5 = mat4(I5, C4, A1, G0); + mat4 h5 = mat4(H5, F4, B1, D0); + mat4 f4 = mat4(F4, B1, D0, H5); + + vec4 interp_restriction_lv1 = ne(e_,f_) * ne(e_,h_); + vec4 interp_restriction_lv2_left = ne(e_,g_) * ne(d_,g_); + vec4 interp_restriction_lv2_up = ne(e_,c_) * ne(b_,c_); + + vec4 wd1 = weighted_distance(e, c, g, i, h5, f4, h, f); + vec4 wd2 = weighted_distance(h, d, i5, f, i4, b, e, i); + + vec4 one = vec4(1.0, 1.0, 1.0, 1.0); + vec4 edri = le(wd1,wd2) * interp_restriction_lv1; + vec4 edr = clamp(lt(wd1,wd2) * ((one - edri.yzwx) + (one - edri.wxyz)) * interp_restriction_lv1, 0.0, 1.0); + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr * (one - edri.yzwx) * lt4(e, c); + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up * edr * (one - edri.wxyz) * lt4(e, g); + + vec4 info; + info.x = dot(edr, vec4(8.0, 4.0, 2.0, 1.0)); + info.y = dot(edr_left, vec4(8.0, 4.0, 2.0, 1.0)); + info.z = dot(edr_up, vec4(8.0, 4.0, 2.0, 1.0)); + info.w = dot(edri, vec4(8.0, 4.0, 2.0, 1.0)); + + gl_FragColor = remapTo01(info, vec4(0.0, 0.0, 0.0, 0.0), vec4(255.0, 255.0, 255.0, 255.0)); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.sc new file mode 100644 index 00000000000..a32605fca4e --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.sc @@ -0,0 +1,160 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 Accuracy - pass1 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); +SAMPLER2D(ORIG_texture, 1); + +uniform vec4 XBR_SCALE; +uniform vec4 u_tex_size0; + +#define XBR_RED_COEF 17.0 +#define XBR_GREEN_COEF 20.0 +#define XBR_BLUE_COEF 3.0 + +#define round(X) floor((X)+0.5) + +const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); +const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); +const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); +const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); +const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); +const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); +const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); +const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); +const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); +const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25); + + +float df1(vec4 A, vec4 B) +{ + float rmean = (A.r + B.r)/2.0; + vec4 diff = A - B; + vec4 K = vec4(XBR_RED_COEF+rmean, XBR_GREEN_COEF, XBR_BLUE_COEF-rmean, 0.0); + + return sqrt(dot(K * diff, diff)); +} + +vec4 df(mat4 A, mat4 B) +{ + return vec4(df1(A[0],B[0]), df1(A[1],B[1]), df1(A[2],B[2]), df1(A[3],B[3])); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 remapFrom01(vec4 v, vec4 low, vec4 high) +{ + return round(mix(low, high, v)); +} + +vec4 unpack_info(float i) +{ + vec4 info; + float frac_val = fract(i / 2.0f); + info.w = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.z = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.y = round(frac_val); + info.x = i / 2.0f - frac_val; + + return info; +} + +void main() +{ + vec4 delta = 1.0 / XBR_SCALE.xxxx; + vec4 deltaL = vec4(0.5, 1.0, 0.5, 1.0) / XBR_SCALE.xxxx; + vec4 deltaU = deltaL.yxwz; + + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 B = texture2D(ORIG_texture, v_texcoord1.xy); + vec4 D = texture2D(ORIG_texture, v_texcoord2.xw); + vec4 E = texture2D(ORIG_texture, v_texcoord2.yw); + vec4 F = texture2D(ORIG_texture, v_texcoord2.zw); + vec4 H = texture2D(ORIG_texture, v_texcoord1.xw); + + mat4 b = mat4(B, D, H, F); + mat4 e = mat4(E, E, E, E); + mat4 d = mat4(D, H, F, B); + mat4 f = mat4(F, B, D, H); + mat4 h = mat4(H, F, B, D); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec4 fx45i = saturate((fx + delta -Co - Ci) / (2.0 * delta )); + vec4 fx45 = saturate((fx + delta -Co ) / (2.0 * delta )); + vec4 fx30 = saturate((fx_left + deltaL -Cx ) / (2.0 * deltaL)); + vec4 fx60 = saturate((fx_up + deltaU -Cy ) / (2.0 * deltaU)); + + vec4 info = texture2D(decal, v_texcoord0); + + vec4 i = remapFrom01(info, vec4(0.0, 0.0, 0.0, 0.0), vec4(255.0, 255.0, 255.0, 255.0)); + + vec4 edr = unpack_info(i.x); + vec4 edr_left = unpack_info(i.y); + vec4 edr_up = unpack_info(i.z); + vec4 edri = unpack_info(i.w); + + fx45i = edri * fx45i; + fx45 = edr * fx45; + fx30 = edr_left * fx30; + fx60 = edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i)); + + vec4 res1 = E; + res1 = mix(res1, mix(H, F, px.x), maximos.x); + res1 = mix(res1, mix(B, D, px.z), maximos.z); + + vec4 res2 = E; + res2 = mix(res2, mix(F, B, px.y), maximos.y); + res2 = mix(res2, mix(D, H, px.w), maximos.w); + + vec3 E_mix = (df1(E, res2) >= df1(E, res1)) ? vec3(1.0, 1.0, 1.0) : vec3(0.0, 0.0, 0.0); + vec3 res = mix(res1.xyz, res2.xyz, E_mix); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.sc new file mode 100644 index 00000000000..9f9c2836454 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.sc @@ -0,0 +1,160 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 B (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +#define round(X) floor((X)+0.5) + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const float y_weight = 48.0; +const float u_weight = 7.0; +const float v_weight = 6.0; +const mat4 yuv = mat4( + 0.299, 0.587, 0.114, 0.0, + -0.169, -0.331, 0.499, 0.0, + 0.499, -0.418, -0.0813, 0.0, + 0.0, 0.0, 0.0, 0.0 +); + +const mat4 yuv_weighted = mat4( + 48.0 * vec4( 0.299, 0.587, 0.114, 0.0), + 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), + 6.0 * vec4( 0.499, -0.418, -0.0813, 0.0), + 0.0 * vec4( 0.0, 0.0, 0.0, 0.0) +); +const vec4 delta = vec4(0.4, 0.4, 0.4, 0.4); + +vec3 remapTo01(vec3 v, vec3 low, vec3 high) +{ + return saturate((v - low) / (high-low)); +} + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0] ); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0] ); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0] ); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0] ); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0] ); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0] ); + vec4 f4 = h5.yzwx; + + vec4 interp_restriction_lv1 = ne(e,f) * ne(e,h) * ( ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c)); + vec4 interp_restriction_lv2_left = ne(e,g) * ne(d,g); + vec4 interp_restriction_lv2_up = ne(e,c) * ne(b,c); + + interp_restriction_lv1 = clamp(interp_restriction_lv1, 0.0, 1.0); + + vec4 edr = lt(weighted_distance(e, c, g, i, h5, f4, h, f), weighted_distance(h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up * edr; + + vec3 info; + info.x = dot(edr, vec4(8.0, 4.0, 2.0, 1.0)); + info.y = dot(edr_left, vec4(8.0, 4.0, 2.0, 1.0)); + info.z = dot(edr_up, vec4(8.0, 4.0, 2.0, 1.0)); + + gl_FragColor = vec4(remapTo01(info, vec3(0.0, 0.0, 0.0), vec3(255.0, 255.0, 255.0)), 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.sc new file mode 100644 index 00000000000..05b2398ad9c --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.sc @@ -0,0 +1,158 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 C (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +#define round(X) floor((X)+0.5) + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const float y_weight = 48.0; +const float u_weight = 7.0; +const float v_weight = 6.0; +const mat4 yuv = mat4( + 0.299, 0.587, 0.114, 0.0, + -0.169, -0.331, 0.499, 0.0, + 0.499, -0.418, -0.0813, 0.0, + 0.0, 0.0, 0.0, 0.0 +); + +const mat4 yuv_weighted = mat4( + 48.0 * vec4( 0.299, 0.587, 0.114, 0.0), + 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), + 6.0 * vec4( 0.499, -0.418, -0.0813, 0.0), + 0.0 * vec4( 0.0, 0.0, 0.0, 0.0) +); +const vec4 delta = vec4(0.4, 0.4, 0.4, 0.4); + +vec3 remapTo01(vec3 v, vec3 low, vec3 high) +{ + return saturate((v - low) / (high-low)); +} + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 interp_restriction_lv1 = clamp(ne(e,f) * ne(e,h) * (ge(f,b) * ge(f,c) + ge(h,d) * ge(h,g) + lt(e,i) * (ge(f,f4) * ge(f,i4) + ge(h,h5) * ge(h,i5)) + lt(e,g) + lt(e,c)), 0.0, 1.0); + vec4 interp_restriction_lv2_left = ne(e,g) * ne(d,g); + vec4 interp_restriction_lv2_up = ne(e,c) * ne(b,c); + + vec4 edr = lt(weighted_distance(e, c, g, i, h5, f4, h, f), weighted_distance(h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up * edr; + + vec3 info; + info.x = dot(edr, vec4(8.0, 4.0, 2.0, 1.0)); + info.y = dot(edr_left, vec4(8.0, 4.0, 2.0, 1.0)); + info.z = dot(edr_up, vec4(8.0, 4.0, 2.0, 1.0)); + + gl_FragColor = vec4(remapTo01(info, vec3(0.0, 0.0, 0.0), vec3(255.0, 255.0, 255.0)), 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.sc new file mode 100644 index 00000000000..c168b2622a7 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.sc @@ -0,0 +1,163 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 D (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +#define round(X) floor((X)+0.5) + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const float y_weight = 48.0; +const float u_weight = 7.0; +const float v_weight = 6.0; +const mat4 yuv = mat4( + 0.299, 0.587, 0.114, 0.0, + -0.169, -0.331, 0.499, 0.0, + 0.499, -0.418, -0.0813, 0.0, + 0.0, 0.0, 0.0, 0.0 +); + +const mat4 yuv_weighted = mat4( + 48.0 * vec4( 0.299, 0.587, 0.114, 0.0), + 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), + 6.0 * vec4( 0.499, -0.418, -0.0813, 0.0), + 0.0 * vec4( 0.0, 0.0, 0.0, 0.0) +); +const vec4 delta = vec4(0.4, 0.4, 0.4, 0.4); + +vec3 remapTo01(vec3 v, vec3 low, vec3 high) +{ + return saturate((v - low) / (high-low)); +} + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 c1 = i4.yzwx; + vec4 g0 = i5.wxyz; + + vec4 interp_restriction_lv1 = (ne(e,f) * ne(e,h) * (ge(f,b) * ge(h,d) + lt(e,i) * ge(f,i4) * ge(h,i5) + lt(e,g) + lt(e,c)) * (ne(f,f4) * ne(f,i) + ne(h,h5) * ne(h,i) + ne(h,g) + ne(f,c) + lt(b,c1) * lt(d,g0))); + vec4 interp_restriction_lv2_left = (ne(e,g) * ne(d,g)); + vec4 interp_restriction_lv2_up = (ne(e,c) * ne(b,c)); + + interp_restriction_lv1 = clamp(interp_restriction_lv1, 0.0, 1.0); + + vec4 edr = lt(weighted_distance(e, c, g, i, h5, f4, h, f), weighted_distance(h, d, i5, f, i4, b, e, i)) * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up * edr; + + vec3 info; + info.x = dot(vec4(edr ), vec4(8.0, 4.0, 2.0, 1.0)); + info.y = dot(vec4(edr_left), vec4(8.0, 4.0, 2.0, 1.0)); + info.z = dot(vec4(edr_up ), vec4(8.0, 4.0, 2.0, 1.0)); + + gl_FragColor = vec4(remapTo01(info, vec3(0.0, 0.0, 0.0), vec3(255.0, 255.0, 255.0)), 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.sc new file mode 100644 index 00000000000..c46dd90ba0a --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.sc @@ -0,0 +1,162 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 - noblend - pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); +SAMPLER2D(ORIG_texture, 1); + +uniform vec4 u_tex_size0; + +#define round(X) floor((X) + 0.5) + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const float y_weight = 48.0; +const float u_weight = 7.0; +const float v_weight = 6.0; +const mat4 yuv = mat4( + 0.299, 0.587, 0.114, 0.0, + -0.169, -0.331, 0.499, 0.0, + 0.499, -0.418, -0.0813, 0.0, + 0.0, 0.0, 0.0, 0.0 +); + +const mat4 yuv_weighted = mat4( + 48.0 * vec4( 0.299, 0.587, 0.114, 0.0), + 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), + 6.0 * vec4( 0.499, -0.418, -0.0813, 0.0), + 0.0 * vec4( 0.0, 0.0, 0.0, 0.0) +); + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + + +vec3 remapFrom01(vec3 v, vec3 low, vec3 high) +{ + return round(mix(low, high, v)); +} + +vec4 unpack_info(float i) +{ + vec4 info; + float frac_val = fract(i / 2.0f); + info.w = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.z = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.y = round(frac_val); + info.x = i / 2.0f - frac_val; + + return info; +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 B = texture2D(ORIG_texture, v_texcoord1.xy); + vec4 D = texture2D(ORIG_texture, v_texcoord2.xw); + vec4 E = texture2D(ORIG_texture, v_texcoord2.yw); + vec4 F = texture2D(ORIG_texture, v_texcoord2.zw); + vec4 H = texture2D(ORIG_texture, v_texcoord1.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0] ); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0] ); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 h = b.zwxy; + + vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); + vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); + vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); + vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); + vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); + vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); + vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); + + // These inequations define the line below which interpolation occurs. + vec4 fx = ge(Co, Ao*fp.y+Bo*fp.x); + vec4 fx_left = ge(Cx, Ax*fp.y+Bx*fp.x); + vec4 fx_up = ge(Cy, Ay*fp.y+By*fp.x); + + vec4 info = texture2D(decal, v_texcoord0); + + vec3 i = remapFrom01(info.xyz, vec3(0.0, 0.0, 0.0), vec3(15.0, 15.0, 15.0)); + + vec4 edr = unpack_info(i.x); + vec4 edr_left = unpack_info(i.y); + vec4 edr_up = unpack_info(i.z); + + fx = edr * fx; + fx_left = edr_left * fx_left; + fx_up = edr_up * fx_up; + + vec4 nc = max(fx, max(fx_left, fx_up)); + vec4 px = le(df(e,f), df(e,h)); + + vec3 res1 = nc.x > 0.0 ? px.x > 0.0 ? F.xyz : H.xyz : nc.y > 0.0 ? px.y > 0.0 ? B.xyz : F.xyz : nc.z > 0.0 ? px.z > 0.0 ? D.xyz : B.xyz : E.xyz; + vec3 res2 = nc.w > 0.0 ? px.w > 0.0 ? H.xyz : D.xyz : nc.z > 0.0 ? px.z > 0.0 ? D.xyz : B.xyz : nc.y > 0.0 ? px.y > 0.0 ? B.xyz : F.xyz : E.xyz; + + vec2 df12 = abs(mul(mat3(res1, res2, vec3(0.0, 0.0, 0.0)), yuv_weighted[0].xyz).xy - e.xy); + vec3 res = mix(res1, res2, step(df12.x, df12.y)); + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.sc new file mode 100644 index 00000000000..b34ad4fe005 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.sc @@ -0,0 +1,185 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 - pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); +SAMPLER2D(ORIG_texture, 1); + +uniform vec4 u_tex_size0; +uniform vec4 u_tex_size1; +uniform vec4 u_target_dims; + +#define round(X) floor((X)+0.5) + +const float coef = 2.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const float y_weight = 48.0; +const float u_weight = 7.0; +const float v_weight = 6.0; +const mat4 yuv = mat4( + 0.299, 0.587, 0.114, 0.0, + -0.169, -0.331, 0.499, 0.0, + 0.499, -0.418, -0.0813, 0.0, + 0.0, 0.0, 0.0, 0.0 +); + +const mat4 yuv_weighted = mat4( + 48.0 * vec4( 0.299, 0.587, 0.114, 0.0), + 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), + 6.0 * vec4( 0.499, -0.418, -0.0813, 0.0), + 0.0 * vec4( 0.0, 0.0, 0.0, 0.0) +); + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + + +vec3 remapFrom01(vec3 v, vec3 low, vec3 high) +{ + return round(mix(low, high, v)); +} + +vec4 unpack_info(float i) +{ + vec4 info; + float frac_val = fract(i / 2.0f); + info.w = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.z = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.y = round(frac_val); + info.x = i / 2.0f - frac_val; + + return info; +} + +void main() +{ + vec2 fp = fract(v_texcoord0 * u_tex_size0.xy); + + vec4 B = texture2D(ORIG_texture, v_texcoord1.xy); + vec4 D = texture2D(ORIG_texture, v_texcoord2.xw); + vec4 E = texture2D(ORIG_texture, v_texcoord2.yw); + vec4 F = texture2D(ORIG_texture, v_texcoord2.zw); + vec4 H = texture2D(ORIG_texture, v_texcoord1.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 h = b.zwxy; + + vec4 Ao = vec4(1.0, -1.0, -1.0, 1.0); + vec4 Bo = vec4(1.0, 1.0, -1.0, -1.0); + vec4 Co = vec4(1.5, 0.5, -0.5, 0.5); + vec4 Ax = vec4(1.0, -1.0, -1.0, 1.0); + vec4 Bx = vec4(0.5, 2.0, -0.5, -2.0); + vec4 Cx = vec4(1.0, 1.0, -0.5, 0.0); + vec4 Ay = vec4(1.0, -1.0, -1.0, 1.0); + vec4 By = vec4(2.0, 0.5, -2.0, -0.5); + vec4 Cy = vec4(2.0, 0.0, -1.0, 0.5); + + // These inequations define the line below which interpolation occurs. + vec4 fx = (Ao*fp.y+Bo*fp.x); + vec4 fx_left = (Ax*fp.y+Bx*fp.x); + vec4 fx_up = (Ay*fp.y+By*fp.x); + + vec2 delta = vec2(u_tex_size1.x / u_target_dims.x, 0.5 * u_tex_size1.x / u_target_dims.x); + + vec4 fx45 = saturate((fx + delta.xxxx - Co) / (2.0 * delta.xxxx)); + vec4 fx30 = saturate((fx_left + delta.yxyx - Cx) / (2.0 * delta.yxyx)); + vec4 fx60 = saturate((fx_up + delta.xyxy - Cy) / (2.0 * delta.xyxy)); + + vec4 info = texture2D(decal, v_texcoord0); + + vec3 i = remapFrom01(info.xyz, vec3(0.0, 0.0, 0.0), vec3(255.0, 255.0, 255.0)); + + vec4 edr = unpack_info(i.x); + vec4 edr_left = unpack_info(i.y); + vec4 edr_up = unpack_info(i.z); + + fx45 = edr * fx45; + fx30 = edr_left * fx30; + fx60 = edr_up * fx60; + + vec4 px = le(df(e,f), df(e,h)); + + vec4 maximo = max(max(fx30, fx60), fx45); + + mat4 pix = mat4(mix(E, mix(H, F, px.x), maximo.x), mix(E, mix(F, B, px.y), maximo.y), mix(E, mix(B, D, px.z), maximo.z), mix(E, mix(D, H, px.w), maximo.w)); + vec4 pixel = mul(pix, yuv_weighted[0]); + + vec4 diff = df(pixel,e); + + vec3 res = pix[0].xyz; + float mx = diff.x; + + if (diff.y > mx) + { + res = pix[1].xyz; + mx = diff.y; + } + if (diff.z > mx) + { + res = pix[2].xyz; + mx = diff.z; + } + if (diff.w > mx) + { + res = pix[3].xyz; + } + + gl_FragColor = vec4(res, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/varying.def.sc similarity index 71% rename from src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/varying.def.sc index c65b5426733..92c3034f498 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-4p/varying.def.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/varying.def.sc @@ -4,6 +4,9 @@ vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord5 : TEXCOORD5 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord6 : TEXCOORD6 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord7 : TEXCOORD7 = 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/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.sc new file mode 100644 index 00000000000..3a80bf6f7bb --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.sc @@ -0,0 +1,60 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 A (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.sc new file mode 100644 index 00000000000..4cd8b064523 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.sc @@ -0,0 +1,59 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 Accuracy - pass0 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.sc new file mode 100644 index 00000000000..c20050aa1f4 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.sc @@ -0,0 +1,55 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 Accuracy - pass1 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size1; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size1.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xyyy + vec4(0.0, -dy, 0.0, dy); // B + v_texcoord2 = v_texcoord0.xxxy + vec4(-dx, 0.0, dx, 0.0); //D E F + // H + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.sc new file mode 100644 index 00000000000..5515f4f4904 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.sc @@ -0,0 +1,60 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 B (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.sc new file mode 100644 index 00000000000..9d0b7161844 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.sc @@ -0,0 +1,60 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 C (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.sc new file mode 100644 index 00000000000..8f9b4f316d9 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.sc @@ -0,0 +1,60 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 D (squared) - pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.sc new file mode 100644 index 00000000000..86df31a48e4 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.sc @@ -0,0 +1,54 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 - noblend - pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +uniform vec4 u_tex_size1; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size1.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xyyy + vec4( 0.0, -dy, 0.0, dy); // B + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); //D E F + // H + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.sc new file mode 100644 index 00000000000..d678e8b0541 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.sc @@ -0,0 +1,56 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR LV2 - pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size1; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size1.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xyyy + vec4( 0.0, -dy, 0.0, dy); // B + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); //D E F + // H + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc new file mode 100644 index 00000000000..e9328bb4015 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc @@ -0,0 +1,216 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR level 3 pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +const float coef = 2.0; +const float cf = 4.0; +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +vec4 remapTo01(vec4 v, vec4 high) +{ + return (v/high); +} + +vec4 remapFrom01(vec4 v, vec4 high) +{ + return (high*v + vec4(0.5, 0.5, 0.5, 0.5)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +#define FILTRO(EDR0, EDR, LEFT, UP, LEFT3, UP3, PX0, PX3, PX1, LIN0, LIN3, LIN1, PX) \ + if (LEFT > 0.0 && UP == 0.0) \ + { \ + PX0 = vec2(0.0, PX); \ + PX3 = vec2( PX, 0.0); \ + if (LEFT3 > 0.0) \ + { \ + LIN0 = vec4(0.0, 1.0, 0.0, 0.0);\ + LIN3 = vec4(1.0, 0.0, 0.0, 0.0);\ + } \ + else \ + { \ + LIN0 = vec4(0.0, 0.0, 1.0, 0.0);\ + LIN3 = vec4(0.0, 1.0, 1.0, 0.0);\ + } \ + } \ + else if (UP > 0.0 && LEFT == 0.0) \ + { \ + PX0 = vec2(0.0, 1.0 - PX); \ + PX1 = vec2(1.0 - PX, 0.0); \ + if (UP3 > 0.0) \ + { \ + LIN0 = vec4(0.0, 1.0, 0.0, 1.0);\ + LIN1 = vec4(1.0, 0.0, 0.0, 1.0);\ + } \ + else \ + { \ + LIN0 = vec4(0.0, 0.0, 1.0, 1.0);\ + LIN1 = vec4(0.0, 1.0, 1.0, 1.0);\ + } \ + } \ + else if (EDR > 0.0) \ + { \ + LEFT = UP = LEFT3 = UP3 = 0.0; \ + PX0 = vec2(0.0, PX); \ + LIN0 = vec4(0.0, 0.0, 0.0, 1.0); \ + } \ + else if (EDR0 > 0.0) \ + { \ + LEFT = UP = LEFT3 = UP3 = 0.0; \ + PX0 = vec2(0.0, PX); \ + LIN0 = vec4(0.0, 0.0, 0.0, 0.0); \ + } \ + + + +void main() +{ + vec2 px0, px1, px2, px3; + + vec4 A1 = texture2D(decal, v_texcoord1.xw); + vec4 B1 = texture2D(decal, v_texcoord1.yw); + vec4 C1 = texture2D(decal, v_texcoord1.zw); + + vec4 A = texture2D(decal, v_texcoord2.xw); + vec4 B = texture2D(decal, v_texcoord2.yw); + vec4 C = texture2D(decal, v_texcoord2.zw); + + vec4 D = texture2D(decal, v_texcoord3.xw); + vec4 E = texture2D(decal, v_texcoord3.yw); + vec4 F = texture2D(decal, v_texcoord3.zw); + + vec4 G = texture2D(decal, v_texcoord4.xw); + vec4 H = texture2D(decal, v_texcoord4.yw); + vec4 I = texture2D(decal, v_texcoord4.zw); + + vec4 G5 = texture2D(decal, v_texcoord5.xw); + vec4 H5 = texture2D(decal, v_texcoord5.yw); + vec4 I5 = texture2D(decal, v_texcoord5.zw); + + vec4 A0 = texture2D(decal, v_texcoord6.xy); + vec4 D0 = texture2D(decal, v_texcoord6.xz); + vec4 G0 = texture2D(decal, v_texcoord6.xw); + + vec4 C4 = texture2D(decal, v_texcoord7.xy); + vec4 F4 = texture2D(decal, v_texcoord7.xz); + vec4 I4 = texture2D(decal, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 c1 = i4.yzwx; + vec4 g0 = i5.wxyz; + vec4 b1 = h5.zwxy; + vec4 d0 = h5.wxyz; + + vec4 interp_restriction_lv0 = ne(e,f) * ne(e,h); + vec4 interp_restriction_lv1 = (ge(f,b) * ge(f,c) + ge(h,d) * ge(h,g) + lt(e,i) * (ge(f,f4) * ge(f,i4) + ge(h,h5) * ge(h,i5)) + lt(e,g) + lt(e,c)); + vec4 interp_restriction_lv2_left = ne(e,g) * ne(d,g); + vec4 interp_restriction_lv2_up = ne(e,c) * ne(b,c); + vec4 interp_restriction_lv3_left = ne(e,g0) * ne(d0,g0); + vec4 interp_restriction_lv3_up = ne(e,c1) * ne(b1,c1); + + vec4 edr0 = lt(weighted_distance(e, c, g, i, h5, f4, h, f), weighted_distance(h, d, i5, f, i4, b, e, i)) * interp_restriction_lv0; + + vec4 edr = edr0 * interp_restriction_lv1; + vec4 edr_left = le(coef * df(f,g), df(h,c)) * interp_restriction_lv2_left * edr; + vec4 edr_up = ge(df(f,g), coef * df(h,c)) * interp_restriction_lv2_up * edr; + vec4 edr3_left = le(cf * df(f,g0), df(h,c1)) * interp_restriction_lv3_left * edr_left; + vec4 edr3_up = ge(df(f,g0), cf * df(h,c1)) * interp_restriction_lv3_up * edr_up; + + vec4 px = le(df(e,f), df(e,h)); + + vec4 lin0 = vec4(1.0, 1.0, 1.0, 1.0); + vec4 lin1 = lin0; + vec4 lin2 = lin0; + vec4 lin3 = lin0; + + FILTRO(edr0.x, edr.x, edr_left.x, edr_up.x, edr3_left.x, edr3_up.x, px0, px3, px1, lin0, lin3, lin1, px.x); + FILTRO(edr0.y, edr.y, edr_left.y, edr_up.y, edr3_left.y, edr3_up.y, px1, px0, px2, lin1, lin0, lin2, px.y); + FILTRO(edr0.z, edr.z, edr_left.z, edr_up.z, edr3_left.z, edr3_up.z, px2, px1, px3, lin2, lin1, lin3, px.z); + FILTRO(edr0.w, edr.w, edr_left.w, edr_up.w, edr3_left.w, edr3_up.w, px3, px2, px0, lin3, lin2, lin0, px.w); + + vec4 info = mul(vec4(1.0, 2.0, 4.0, 8.0), mat4( edr3_left, + edr3_up, + px0.x, px1.x, px2.x, px3.x, + px0.y, px1.y, px2.y, px3.y)); + + info += mul(vec4(16.0, 32.0, 64.0, 128.0), mat4(lin0.x, lin1.x, lin2.x, lin3.x, + lin0.y, lin1.y, lin2.y, lin3.y, + lin0.z, lin1.z, lin2.z, lin3.z, + lin0.w, lin1.w, lin2.w, lin3.w)); + + gl_FragColor = vec4(remapTo01(info, vec4(255.0, 255.0, 255.0, 255.0))); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.sc new file mode 100644 index 00000000000..df6d0a72265 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.sc @@ -0,0 +1,180 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR level 3 pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); +SAMPLER2D(ORIG_texture, 1); + +uniform vec4 u_tex_size0; + +#define round(X) floor((X)+0.5) + +const mat4 sym_vectors = mat4(1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + +const vec3 lines0 = vec3(1.0, 1.0, 0.75); +const vec3 lines1 = vec3(1.0, 1.0, 0.5); +const vec3 lines2 = vec3(2.0, 1.0, 0.5); +const vec3 lines3 = vec3(1.0, 2.0, 0.5); +const vec3 lines4 = vec3(3.0, 1.0, 0.5); +const vec3 lines5 = vec3(1.0, 3.0, 0.5); + +const vec3 lines6 = vec3(-1.0, 2.0, 0.5); +const vec3 lines7 = vec3( 2.0, -1.0, 0.5); +const vec3 lines8 = vec3(-1.0, 3.0, 0.5); +const vec3 lines9 = vec3( 3.0, -1.0, 0.5); + +const vec3 lines10 = vec3(3.0, 1.0, 1.5); +const vec3 lines11 = vec3(1.0, 3.0, 1.5); + +float remapFrom01(float v, float high) +{ + return (high*v + 0.5); +} + + +vec3 remapFrom01(vec3 v, vec3 low, vec3 high) +{ + return round(mix(low, high, v)); +} + +vec4 unpack_info(float i) +{ + vec4 info; + float frac_val = fract(i / 2.0f); + info.w = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.z = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.y = round(frac_val); + info.x = i / 2.0f - frac_val; + + return info; +} + +void main() +{ + vec2 pos = fract(v_texcoord0 * u_tex_size0.xy) - vec2(0.5, 0.5); // pos = pixel position + vec4 dir = vec4(sign(pos), 0.0, 0.0); // dir = pixel direction + + vec2 g1 = dir.xy *( saturate(-dir.y * dir.x) * v_texcoord1.zw + saturate( dir.y * dir.x) * v_texcoord1.xy); + vec2 g2 = dir.xy *( saturate( dir.y * dir.x) * v_texcoord1.zw + saturate(-dir.y * dir.x) * v_texcoord1.xy); + + vec4 F = texture2D(ORIG_texture, v_texcoord0 +g1); + vec4 B = texture2D(ORIG_texture, v_texcoord0 -g2); + vec4 D = texture2D(ORIG_texture, v_texcoord0 -g1); + vec4 H = texture2D(ORIG_texture, v_texcoord0 +g2); + vec4 E = texture2D(ORIG_texture, v_texcoord0 ); + + vec4 F4 = texture2D(ORIG_texture, v_texcoord0 +2.0*g1); + vec4 I = texture2D(ORIG_texture, v_texcoord0 +g1+g2); + vec4 H5 = texture2D(ORIG_texture, v_texcoord0 +2.0*g2); + + vec4 icomp = round(saturate(mul(dir, sym_vectors))); // choose info component + float info = remapFrom01(dot(texture2D(decal, v_texcoord0 ), icomp), 255.0); // retrieve 1st pass info + float info_nr = remapFrom01(dot(texture2D(decal, v_texcoord0 + g1), icomp), 255.0); // 1st pass info from neighbor r + float info_nd = remapFrom01(dot(texture2D(decal, v_texcoord0 + g2), icomp), 255.0); // 1st pass info from neighbor d + + info = info / 2.0 - fract(info / 2.0); + info = info / 2.0 - fract(info / 2.0); + vec2 px; + + float frac_val = fract(info / 2.0); + px.x = round(frac_val); + info = info / 2.0 - frac_val; + + frac_val = fract(info / 2.0); + px.y = round(frac_val); + info = info / 2.0 - frac_val; + + vec4 flags = unpack_info(info); // retrieve 1st pass flags + + frac_val = fract(info_nr / 2.0); + float edr3_nrl = round(frac_val); + info_nr = info_nr / 2.0 - frac_val; + info_nr = info_nr / 2.0 - fract(info_nr / 2.0); + info_nr = info_nr / 2.0 - fract(info_nr / 2.0); + + frac_val = fract(info_nr / 2.0); + float pxr = round(frac_val); + info_nr = info_nr / 2.0 - frac_val; + + info_nd = info_nd / 2.0 - fract(info_nd / 2.0); + + frac_val = fract(info_nd / 2.0); + float edr3_ndu = round(frac_val); + info_nd = info_nd / 2.0 - frac_val; + + info_nd = info_nd / 2.0 - fract(info_nd / 2.0); + + frac_val = fract(info_nd / 2.0); + float pxd = round(frac_val); + info_nd = info_nd / 2.0 - frac_val; + + float aux = round(dot(vec4(8.0, 4.0, 2.0, 1.0), flags)); + vec3 slep; + + if (aux >= 6.0) + { + slep = (aux == 6.0 ? lines6 : (aux == 7.0 ? lines7 : (aux == 8.0 ? lines8 : (aux == 9.0 ? lines9 : (aux == 10.0 ? lines10 : lines11))))); + } + else + { + slep = (aux == 0.0 ? lines0 : (aux == 1.0 ? lines1 : (aux == 2.0 ? lines2 : (aux == 3.0 ? lines3 : (aux == 4.0 ? lines4 : lines5))))); + } + + vec2 fp = (dir.x * dir.y) > 0.0 ? abs(pos) : abs(pos.yx); + + vec3 fp1 = vec3(fp.yx, -1); + + vec3 color = E.xyz; + float fx; + + if (aux < 10.0) + { + fx = saturate(dot(fp1, slep) / (2.0 * v_texcoord2.x) + 0.5); + color = mix(E.xyz, mix(mix(H.xyz, F.xyz, px.y), mix(D.xyz, B.xyz, px.y), px.x), fx); // interpolate if there's edge + } + else if (edr3_nrl > 0.0) + { + fx = saturate(dot(fp1, lines10) / (2.0 * v_texcoord2.x) + 0.5); + color = mix(E.xyz, mix(I.xyz, F4.xyz, pxr), fx); // interpolate if there's edge + } + else if (edr3_ndu > 0.0) + { + fx = saturate(dot(fp1, lines11) / (2.0 * v_texcoord2.x) + 0.5); + color = mix(E.xyz, mix(H5.xyz, I.xyz, pxd), fx); // interpolate if there's edge + } + + gl_FragColor = vec4(color, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/varying.def.sc similarity index 71% rename from src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/varying.def.sc index c65b5426733..92c3034f498 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/super-4xbr-3d-6p-smoother/varying.def.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/varying.def.sc @@ -4,6 +4,9 @@ vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord5 : TEXCOORD5 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord6 : TEXCOORD6 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord7 : TEXCOORD7 = 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/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.sc new file mode 100644 index 00000000000..d4420512bd4 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.sc @@ -0,0 +1,60 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR level 3 pass0 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.sc new file mode 100644 index 00000000000..edfd9fa3dd9 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.sc @@ -0,0 +1,55 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + Hyllian's xBR level 3 pass1 Shader + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "common.sh" + +uniform vec4 u_tex_size1; +uniform vec4 u_target_dims; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A3 B3 C3 + // A1 B1 C1 + //A2 A0 A B C C4 C6 + //D2 D0 D E F F4 F6 + //G2 G0 G H I I4 I6 + // G5 H5 I5 + // G7 H7 I7 + + vec2 ps = 1.0 / u_tex_size1.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = vec4(dx, 0, 0, dy); // F H + v_texcoord2 = vec4(u_tex_size1.x / u_target_dims.x, 0.5 * u_tex_size1.x / u_target_dims.x, 0.0, 0.0); + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.sc new file mode 100644 index 00000000000..fe2e3188052 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.sc @@ -0,0 +1,208 @@ +$input v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass1 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); + +#define round(X) floor((X)+0.5) +#define TEX(dx,dy) texture2D(decal, v_texcoord0 + vec2(dx,dy) * v_texcoord1.xy) + +const float cf2 = 2.0; +const float cf3 = 4.0; +const float cf4 = 4.0; +const vec4 eq_thresholdold = vec4(15.0, 15.0, 15.0, 15.0); +const vec4 eq_threshold = vec4( 2.0, 2.0, 2.0, 2.0); +const vec4 eq_threshold3 = vec4(25.0, 25.0, 25.0, 25.0); +const vec4 yuv_weight = vec4( 4.0, 1.0, 2.0, 0.0); +const mat4 yuvT = mat4(0.299, -0.169, 0.499, 0.0, 0.587, -0.331, -0.418, 0.0, 0.114, 0.499, -0.0813, 0.0, 0.0, 0.0, 0.0, 0.0); +const mat4 yuv = mat4(0.299, 0.587, 0.114, 0.0, -0.169, -0.331, 0.499, 0.0, 0.499, -0.418, -0.0813, 0.0, 0.0, 0.0, 0.0, 0.0); +const mat4 yuv_weighted = mat4(4.0 * vec4(0.299, 0.587, 0.114, 0.0), 2.0 * vec4(-0.169, -0.331, 0.499, 0.0), vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 maximo = vec4(255.0, 255.0, 255.0, 255.0); + + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +vec4 rd(vec4 A, vec4 B, vec4 C, vec4 D) +{ + return vec4(greaterThan(df(C,D) / (df(A,B) + 0.000000001), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 id(vec4 A, vec4 B, vec4 C, vec4 D) +{ + return vec4(greaterThan(df(C,D), df(A,B))); +} + +vec4 nid(vec4 A, vec4 B, vec4 C, vec4 D) +{ + return vec4(lessThanEqual(df(C,D), df(A,B))); +} + +vec4 remapTo01(vec4 v, vec4 high) +{ + return (v/high); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 ltt(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), eq_threshold)); +} + +vec4 get(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), eq_threshold3)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec4 A3 = TEX(-1,-3); vec4 B3 = TEX( 0,-3); vec4 C3 = TEX( 1,-3); + vec4 A1 = TEX(-1,-2); vec4 B1 = TEX( 0,-2); vec4 C1 = TEX( 1,-2); + vec4 A2 = TEX(-3,-1); vec4 A0 = TEX(-2,-1); vec4 A = TEX(-1,-1); + vec4 B = TEX( 0,-1); vec4 C = TEX( 1,-1); vec4 C4 = TEX( 2,-1); vec4 C6 = TEX( 3,-1); + vec4 D2 = TEX(-3, 0); vec4 D0 = TEX(-2, 0); vec4 D = TEX(-1, 0); vec4 E = TEX( 0, 0); + vec4 F = TEX( 1, 0); vec4 F4 = TEX( 2, 0); vec4 F6 = TEX( 3, 0); + vec4 G2 = TEX(-3, 1); vec4 G0 = TEX(-2, 1); vec4 G = TEX(-1, 1); vec4 H = TEX( 0, 1); + vec4 I = TEX( 1, 1); vec4 I4 = TEX( 2, 1); vec4 I6 = TEX( 3, 1); + vec4 G5 = TEX(-1, 2); vec4 H5 = TEX( 0, 2); vec4 I5 = TEX( 1, 2); + vec4 G7 = TEX(-1, 3); vec4 H7 = TEX( 0, 3); vec4 I7 = TEX( 1, 3); + + mat4 bdhf = mul(mat4(B, D, H, F), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 b = mul(bdhf, yuv_weight); + + bdhf = mul(mat4(C, A, G, I), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 c = mul(bdhf, yuv_weight); + + bdhf = mul(mat4(E, E, E, E), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 e = mul(bdhf, yuv_weight); + + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + bdhf = mul(mat4(I4, C1, A0, G5), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 i4 = mul(bdhf, yuv_weight); + + bdhf = mul(mat4(I5, C4, A1, G0), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 i5 = mul(bdhf, yuv_weight); + + bdhf = mul(mat4(H5, F4, B1, D0), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 h5 = mul(bdhf, yuv_weight); + + vec4 f4 = h5.yzwx; + + vec4 c1 = i4.yzwx; + vec4 g0 = i5.wxyz; + vec4 b1 = h5.zwxy; + vec4 d0 = h5.wxyz; + + bdhf = mul(mat4(I6, C3, A2, G7), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 i6 = mul(bdhf, yuv_weight); + + bdhf = mul(mat4(I7, C6, A3, G2), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 i7 = mul(bdhf, yuv_weight); + + bdhf = mul(mat4(H7, F6, B3, D2), yuvT); + bdhf = mat4(abs(bdhf[0]), abs(bdhf[1]), abs(bdhf[2]), abs(bdhf[3])); + vec4 h7 = mul(bdhf, yuv_weight); + + vec4 f6 = h7.yzwx; + + vec4 c3 = i6.yzwx; + vec4 g2 = i7.wxyz; + vec4 b3 = h7.zwxy; + vec4 d2 = h7.wxyz; + + vec4 interp_restriction_lv1 = ne(e,f ) * ne(e ,h ); + vec4 interp_restriction_lv2_left = ne(e,g ) * ne(d ,g ) * (ltt(e, d ) + ltt(h ,g )); + vec4 interp_restriction_lv2_up = ne(e,c ) * ne(b ,c ) * (ltt(e, b ) + ltt(f ,c )); + vec4 interp_restriction_lv3_left = ne(e,g0) * ne(d0,g0) * (ltt(d ,d0) + ltt(g ,g0)); + vec4 interp_restriction_lv3_up = ne(e,c1) * ne(b1,c1) * (ltt(b ,b1) + ltt(c ,c1)); + vec4 interp_restriction_lv4_left = ne(e,g2) * ne(d2,g2) * (ltt(d0,d2) + ltt(g0,g2)); + vec4 interp_restriction_lv4_up = ne(e,c3) * ne(b3,c3) * (ltt(b1,b3) + ltt(c1,c3)); + + vec4 wd1 = weighted_distance(e, c, g, i, h5, f4, h, f); + vec4 wd2 = weighted_distance(h, d, i5, f, i4, b, e, i); + + vec4 edr0 = le(wd1, wd2) * interp_restriction_lv1; + vec4 edr = lt(wd1, wd2) * interp_restriction_lv1 * (ge(f,b) * nid(f,c,f,b) + ge(h,d) * nid(h,g,h,d) + lt(e,g) + lt(e,c)); + vec4 edr_left = le(cf2 * df(f,g ), df(h,c )) * interp_restriction_lv2_left * edr; + vec4 edr_up = ge(df(f,g ), cf2 * df(h,c )) * interp_restriction_lv2_up * edr; + vec4 edr3_left = le(cf3 * df(f,g0), df(h,c1)) * interp_restriction_lv3_left * edr_left; + vec4 edr3_up = ge(df(f,g0), cf3 * df(h,c1)) * interp_restriction_lv3_up * edr_up; + vec4 edr4_left = le(cf4 * df(f,g2), df(h,c3)) * interp_restriction_lv4_left * edr3_left; + vec4 edr4_up = ge(df(f,g2), cf4 * df(h,c3)) * interp_restriction_lv4_up * edr3_up; + + vec4 info; + info.x = (edr4_left.x > 0.0 && edr4_up.x == 0.0) ? 8.0 : ((edr4_up.x > 0.0 && edr4_left.x == 0.0) ? 7.0 : ((edr3_left.x > 0.0 && edr3_up.x == 0.0) ? 6.0 : ((edr3_up.x > 0.0 && edr3_left.x == 0.0) ? 5.0 : ((edr_left.x > 0.0 && edr_up.x == 0.0) ? 4.0 : ((edr_up.x > 0.0 && edr_left.x == 0.0) ? 3.0 : (edr.x > 0.0 ? 2.0 : (edr0.x > 0.0 ? 1.0 : 0.0))))))); + info.y = (edr4_left.y > 0.0 && edr4_up.y == 0.0) ? 8.0 : ((edr4_up.y > 0.0 && edr4_left.y == 0.0) ? 7.0 : ((edr3_left.y > 0.0 && edr3_up.y == 0.0) ? 6.0 : ((edr3_up.y > 0.0 && edr3_left.y == 0.0) ? 5.0 : ((edr_left.y > 0.0 && edr_up.y == 0.0) ? 4.0 : ((edr_up.y > 0.0 && edr_left.y == 0.0) ? 3.0 : (edr.y > 0.0 ? 2.0 : (edr0.y > 0.0 ? 1.0 : 0.0))))))); + info.z = (edr4_left.z > 0.0 && edr4_up.z == 0.0) ? 8.0 : ((edr4_up.z > 0.0 && edr4_left.z == 0.0) ? 7.0 : ((edr3_left.z > 0.0 && edr3_up.z == 0.0) ? 6.0 : ((edr3_up.z > 0.0 && edr3_left.z == 0.0) ? 5.0 : ((edr_left.z > 0.0 && edr_up.z == 0.0) ? 4.0 : ((edr_up.z > 0.0 && edr_left.z == 0.0) ? 3.0 : (edr.z > 0.0 ? 2.0 : (edr0.z > 0.0 ? 1.0 : 0.0))))))); + info.w = (edr4_left.w > 0.0 && edr4_up.w == 0.0) ? 8.0 : ((edr4_up.w > 0.0 && edr4_left.w == 0.0) ? 7.0 : ((edr3_left.w > 0.0 && edr3_up.w == 0.0) ? 6.0 : ((edr3_up.w > 0.0 && edr3_left.w == 0.0) ? 5.0 : ((edr_left.w > 0.0 && edr_up.w == 0.0) ? 4.0 : ((edr_up.w > 0.0 && edr_left.w == 0.0) ? 3.0 : (edr.w > 0.0 ? 2.0 : (edr0.w > 0.0 ? 1.0 : 0.0))))))); + + gl_FragColor = vec4(remapTo01(info, maximo)); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.sc new file mode 100644 index 00000000000..b0e0edf7778 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.sc @@ -0,0 +1,235 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass2 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); +SAMPLER2D(ORIG_texture, 1); + +#define round(X) floor((X)+0.5) + +const float cf2 = 2.0; +const float cf3 = 4.0; +const float cf4 = 4.0; +const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); +const vec4 eq_threshold2 = vec4( 5.0, 5.0, 5.0, 5.0); +const vec4 eq_threshold3 = vec4(25.0, 25.0, 25.0, 25.0); +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 maximo = vec4(255.0, 255.0, 255.0, 255.0); + +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +vec4 rd(vec4 A, vec4 B, vec4 C, vec4 D) +{ + return vec4(greaterThan(df(C,D) / (df(A,B) + 0.000000001), vec4(2.0, 2.0, 2.0, 2.0))); +} + +vec4 id(vec4 A, vec4 B, vec4 C, vec4 D) +{ + return vec4(greaterThan(df(C,D), df(A,B))); +} + +vec4 nid(vec4 A, vec4 B, vec4 C, vec4 D) +{ + return vec4(lessThanEqual(df(C,D), df(A,B))); +} + +vec4 remapTo01(vec4 v, vec4 high) +{ + return (v/high); +} + +vec4 remapFrom01(vec4 v, vec4 high) +{ + return round(high*v); +} + +vec4 eq(vec4 A, vec4 B) +{ + return vec4(equal(A, B)); +} + +vec4 lt(vec4 A, vec4 B) +{ + return vec4(lessThan(A, B)); +} + +vec4 ltt(vec4 A, vec4 B) +{ + return vec4(lessThan(df(A, B), eq_threshold)); +} + +vec4 get(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(df(A, B), eq_threshold3)); +} + +vec4 le(vec4 A, vec4 B) +{ + return vec4(lessThanEqual(A, B)); +} + +vec4 ge(vec4 A, vec4 B) +{ + return vec4(greaterThanEqual(A, B)); +} + +vec4 gt(vec4 A, vec4 B) +{ + return vec4(greaterThan(A, B)); +} + +vec4 ne(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +vec4 select(vec4 A, vec4 B, vec4 C) +{ + vec4 result; + result.x = ((A.x > 0.0) ? B.x : C.x); + result.y = ((A.y > 0.0) ? B.y : C.y); + result.z = ((A.z > 0.0) ? B.z : C.z); + result.w = ((A.w > 0.0) ? B.w : C.w); + return result; +} + +vec4 pe_check(vec4 pe, vec4 jag, float cf1, float cf2) +{ + pe.x = (pe.x == cf1 || pe.x == cf2) ? (jag.x > 0.0 ? pe.x : (pe.x - 2.0)) : pe.x; + pe.y = (pe.y == cf1 || pe.y == cf2) ? (jag.y > 0.0 ? pe.y : (pe.y - 2.0)) : pe.y; + pe.z = (pe.z == cf1 || pe.z == cf2) ? (jag.z > 0.0 ? pe.z : (pe.z - 2.0)) : pe.z; + pe.w = (pe.w == cf1 || pe.w == cf2) ? (jag.w > 0.0 ? pe.w : (pe.w - 2.0)) : pe.w; + return pe; +} + +void main() +{ + vec4 PA = texture2D(decal, v_texcoord2.xw); + vec4 PB = texture2D(decal, v_texcoord2.yw); + vec4 PC = texture2D(decal, v_texcoord2.zw); + + vec4 PD = texture2D(decal, v_texcoord3.xw); + vec4 PE = texture2D(decal, v_texcoord3.yw); + vec4 PF = texture2D(decal, v_texcoord3.zw); + + vec4 PG = texture2D(decal, v_texcoord4.xw); + vec4 PH = texture2D(decal, v_texcoord4.yw); + vec4 PI = texture2D(decal, v_texcoord4.zw); + + vec4 A1 = texture2D(ORIG_texture, v_texcoord1.xw); + vec4 B1 = texture2D(ORIG_texture, v_texcoord1.yw); + vec4 C1 = texture2D(ORIG_texture, v_texcoord1.zw); + + vec4 A = texture2D(ORIG_texture, v_texcoord2.xw); + vec4 B = texture2D(ORIG_texture, v_texcoord2.yw); + vec4 C = texture2D(ORIG_texture, v_texcoord2.zw); + + vec4 D = texture2D(ORIG_texture, v_texcoord3.xw); + vec4 E = texture2D(ORIG_texture, v_texcoord3.yw); + vec4 F = texture2D(ORIG_texture, v_texcoord3.zw); + + vec4 G = texture2D(ORIG_texture, v_texcoord4.xw); + vec4 H = texture2D(ORIG_texture, v_texcoord4.yw); + vec4 I = texture2D(ORIG_texture, v_texcoord4.zw); + + vec4 G5 = texture2D(ORIG_texture, v_texcoord5.xw); + vec4 H5 = texture2D(ORIG_texture, v_texcoord5.yw); + vec4 I5 = texture2D(ORIG_texture, v_texcoord5.zw); + + vec4 A0 = texture2D(ORIG_texture, v_texcoord6.xy); + vec4 D0 = texture2D(ORIG_texture, v_texcoord6.xz); + vec4 G0 = texture2D(ORIG_texture, v_texcoord6.xw); + + vec4 C4 = texture2D(ORIG_texture, v_texcoord7.xy); + vec4 F4 = texture2D(ORIG_texture, v_texcoord7.xz); + vec4 I4 = texture2D(ORIG_texture, v_texcoord7.xw); + + vec4 b = mul(mat4(B, D, H, F), yuv_weighted[0]); + vec4 c = mul(mat4(C, A, G, I), yuv_weighted[0]); + vec4 e = mul(mat4(E, E, E, E), yuv_weighted[0]); + vec4 d = b.yzwx; + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4 = mul(mat4(I4, C1, A0, G5), yuv_weighted[0]); + vec4 i5 = mul(mat4(I5, C4, A1, G0), yuv_weighted[0]); + vec4 h5 = mul(mat4(H5, F4, B1, D0), yuv_weighted[0]); + vec4 f4 = h5.yzwx; + + vec4 pe = remapFrom01(PE, maximo); + vec4 pf = remapFrom01(PF, maximo); + vec4 ph = remapFrom01(PH, maximo); + vec4 pb = remapFrom01(PB, maximo); + vec4 pd = remapFrom01(PD, maximo); + + vec4 f2 = vec4(pf.z, pb.w, pd.x, ph.y); + vec4 h2 = vec4(ph.z, pf.w, pb.x, pd.y); + vec4 f1 = vec4(pf.y, pb.z, pd.w, ph.x); + vec4 h3 = vec4(ph.w, pf.x, pb.y, pd.z); + + vec4 zero = vec4(0.0, 0.0, 0.0, 0.0); + vec4 one = vec4(1.0, 1.0, 1.0, 1.0); + vec4 two = vec4(2.0, 2.0, 2.0, 2.0); + vec4 four = vec4(4.0, 4.0, 4.0, 4.0); + vec4 nbrs = select(gt(pe.yzwx, one) + gt(pe.wxyz, one), one, zero); + vec4 jag1 = select(gt( f2, one) + gt( h2, one), one, zero); + vec4 jag2 = select(gt( f2, two) + gt( h2, two), one, zero); + vec4 jag3 = select(gt( f2, four) + gt( h2, four), one, zero); + + pe = pe_check(pe, jag3, 7.0, 8.0); + pe = pe_check(pe, jag2, 5.0, 6.0); + + vec4 jag91 = clamp((id(h,i,e,h) + id(i4,i,f4,i4)) * gt(f2, one) * gt(f1, one), 0.0, 1.0); + vec4 jag92 = clamp((id(f,i,e,f) + id(i5,i,h5,i5)) * gt(h2, one) * gt(h3, one), 0.0, 1.0); + vec4 jag93 = clamp(rd(h,g,e,g) , 0.0, 1.0); + vec4 jag94 = clamp(rd(f,c,e,c) , 0.0, 1.0); + vec4 jag9 = clamp(jag91 * jag93 + jag92 * jag94 , 0.0, 1.0); + + vec4 pe_select = eq(pe, zero) + ((one - nbrs) + jag1) * jag9; + + pe.x = pe_select.x > 0.0 ? pe.x : 1.0; + pe.y = pe_select.y > 0.0 ? pe.y : 1.0; + pe.z = pe_select.z > 0.0 ? pe.z : 1.0; + pe.w = pe_select.w > 0.0 ? pe.w : 1.0; + + gl_FragColor = vec4(remapTo01(pe, maximo)); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.sc new file mode 100644 index 00000000000..00391c77120 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.sc @@ -0,0 +1,172 @@ +$input v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass3 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); +SAMPLER2D(ORIG_texture, 1); + +uniform vec4 u_tex_size1; + +#define round(X) floor((X)+0.5) + +const float coef = 2.0; +const float cf = 4.0; +const float eq_threshold = 15.0; +const mat4 yuv_weighted = mat4(48.0 * vec4(0.299, 0.587, 0.114, 0.0), 7.0 * vec4(-0.169, -0.331, 0.499, 0.0), 6.0 * vec4(0.499, -0.418, -0.0813, 0.0), vec4(0.0, 0.0, 0.0, 0.0)); +const vec4 maximo = vec4(255.0, 255.0, 255.0, 255.0); +const vec4 low = vec4(-64.0, -64.0, -64.0, -64.0); +const vec4 high = vec4( 64.0, 64.0, 64.0, 64.0); + +const mat4 sym_vectors = mat4(1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + +// Bx, Ay, C +const vec3 lines0 = vec3( 4.0, 4.0, 4.0); // 0 NL +const vec3 lines1 = vec3( 4.0, 4.0, 3.0); // 1 LV0 +const vec3 lines2 = vec3( 4.0, 4.0, 2.0); // 2 LV1 +const vec3 lines3 = vec3( 8.0, 4.0, 2.0); // 3 LV2u +const vec3 lines4 = vec3( 4.0, 8.0, 2.0); // 4 LV2l +const vec3 lines5 = vec3(12.0, 4.0, 2.0); // 5 LV3u +const vec3 lines6 = vec3( 4.0,12.0, 2.0); // 6 LV3l +const vec3 lines7 = vec3(16.0, 4.0, 2.0); // 7 LV4u +const vec3 lines8 = vec3( 4.0,16.0, 2.0); // 8 LV4l + +const vec3 lines9 = vec3(12.0, 4.0, 6.0); // 9 LV3u +const vec3 lines10 = vec3( 4.0,12.0, 6.0); // 10 LV3l +const vec3 lines11 = vec3(16.0, 4.0, 6.0); // 11 LV4u +const vec3 lines12 = vec3( 4.0,16.0, 6.0); // 12 LV4l + +vec4 remapTo01(vec4 v, vec4 low, vec4 high) +{ + return saturate((v - low)/(high-low)); +} + +float remapFrom01(float v, float high) +{ + return round(high*v); +} + +float df(float A, float B) +{ + return abs(A-B); +} + +float weighted_distance(float a, float b, float c, float d, float e, float f, float g, float h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +void main() +{ + vec2 pos = fract(v_texcoord0 * u_tex_size1.xy) - vec2(0.5, 0.5); // pos = pixel position + vec4 dir = vec4(sign(pos), 0.0, 0.0); + + vec2 g1 = dir.xy * (saturate(-dir.y * dir.x) * v_texcoord1.zw + saturate( dir.y * dir.x) * v_texcoord1.xy); + vec2 g2 = dir.xy * (saturate( dir.y * dir.x) * v_texcoord1.zw + saturate(-dir.y * dir.x) * v_texcoord1.xy); + + vec4 E = texture2D(ORIG_texture, v_texcoord0 ); + vec4 F = texture2D(ORIG_texture, v_texcoord0 +g1); + vec4 H = texture2D(ORIG_texture, v_texcoord0 +g2); + vec4 I = texture2D(ORIG_texture, v_texcoord0 +g1+g2); + vec4 F4 = texture2D(ORIG_texture, v_texcoord0 +2.0*g1); + vec4 H5 = texture2D(ORIG_texture, v_texcoord0 +2.0*g2); + + float e = dot(E, yuv_weighted[0]); + float f = dot(F, yuv_weighted[0]); + float h = dot(H, yuv_weighted[0]); + float i = dot(I, yuv_weighted[0]); + float f4= dot(F4, yuv_weighted[0]); + float h5= dot(H5, yuv_weighted[0]); + + vec4 icomp = round(saturate(mul(dir, sym_vectors))); // choose info component + + float infoE = remapFrom01(dot(texture2D(decal, v_texcoord0 ), icomp), 255.0); // retrieve 1st pass info + float infoF = remapFrom01(dot(texture2D(decal, v_texcoord0+g1), icomp), 255.0); // 1st pass info from neighbor r + float infoH = remapFrom01(dot(texture2D(decal, v_texcoord0+g2), icomp), 255.0); // 1st pass info from neighbor d + + vec4 lparam; + float px; + vec2 addr; + + if (infoF == 8.0) + { + lparam.xyz = lines12; + px = float(df(f,f4) <= df(f,i)); + addr.x = 2.0 * px + saturate(1.0 - px); + addr.y = saturate(1.0-px); + } + else if (infoH == 7.0) + { + lparam.xyz = lines11; + px = float(df(h,h5) <= df(h,i)); + addr.x = saturate(1.0-px); + addr.y = 2.0 * px + saturate(1.0 - px); + } + else if (infoF == 6.0) + { + lparam.xyz = lines10; + px = float(df(f,f4) <= df(f,i)); + addr.x = 2.0 * px + saturate(1.0 - px); + addr.y = saturate(1.0-px); + } + else if (infoH == 5.0) + { + lparam.xyz = lines9; + px = float(df(h,h5) <= df(h,i)); + addr.x = saturate(1.0 - px); + addr.y = 2.0 * px + saturate(1.0 - px); + } + else + { + px = float(df(e,f) <= df(e,h)); + addr.x = px; + addr.y = saturate(1.0 - px); + + lparam.xyz = (infoE == 8.0) ? lines8 : ((infoE == 7.0) ? lines7 : ((infoE == 6.0) ? lines6 : ((infoE == 5.0) ? lines5 : ((infoE == 4.0) ? lines4 : ((infoE == 3.0) ? lines3 : ((infoE == 2.0) ? lines2 : ((infoE == 1.0) ? lines1 : lines0))))))); + } + + bool inv = ((dir.x * dir.y) < 0.0); + + // Rotate address from relative to absolute. + addr = addr * dir.yx; + addr = (inv ? addr.yx : addr); + + // Rotate straight line equation from relative to absolute. + lparam.xy = lparam.xy * dir.yx; + lparam.xy = (inv ? lparam.yx : lparam.xy); + + addr.x += 2.0; + addr.y += 2.0; + + lparam.w = addr.x * 8.0 + addr.y; + + gl_FragColor = vec4(remapTo01(lparam, low, high)); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc new file mode 100644 index 00000000000..535f70a5a7d --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc @@ -0,0 +1,164 @@ +$input v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass3 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +SAMPLER2D(decal, 0); +SAMPLER2D(ORIG_texture, 1); + +uniform vec4 u_tex_size1; +uniform vec4 u_target_size; + +#define round(X) floor((X)+0.5) + +const vec3 bin = vec3( 4.0f, 2.0f, 1.0f); +const vec4 low = vec4(-64.0f, -64.0f, -64.0f, -64.0f); +const vec4 high = vec4( 64.0f, 64.0f, 64.0f, 64.0f); + +const mat4 sym_vectors = mat4 (1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + +vec4 remapFrom01(vec4 v, vec4 low, vec4 high) +{ + return round(mix(low, high, v)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +vec4 unpack_info(float i) +{ + vec4 info; + float frac_val = fract(i / 2.0f); + info.w = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.z = round(frac_val); + i = i / 2.0f - frac_val; + + frac_val = fract(i / 2.0f); + info.y = round(frac_val); + info.x = i / 2.0f - frac_val; + + return info; +} + +float df(float A, float B) +{ + return abs(A-B); +} + +vec3 color_mix(vec3 c, vec3 color, vec3 E) +{ + return (c_df(c, E) > c_df(color, E) ? c : color); +} + +#define GET_PIXEL(PARAM, PIXEL) \ + info = PARAM; \ + \ + frac_val = fract(info / 2.0); \ + ay.z = round(frac_val); \ + info = info / 2.0 - frac_val; \ + \ + frac_val = fract(info / 2.0); \ + ay.y = round(frac_val); \ + info = info / 2.0 - frac_val; \ + \ + frac_val = fract(info / 2.0); \ + ay.x = round(frac_val); \ + info = info / 2.0 - frac_val; \ + \ + frac_val = fract(info / 2.0); \ + ax.z = round(frac_val); \ + info = info / 2.0 - frac_val; \ + \ + frac_val = fract(info / 2.0); \ + ax.y = round(frac_val); \ + info = info / 2.0 - frac_val; \ + \ + ax.x = round(info); \ + iq.x = dot(ax, bin) - 2.0; \ + iq.y = dot(ay, bin) - 2.0; \ + PIXEL = texture2D(ORIG_texture, v_texcoord0 + iq.x * v_texcoord1.xy + iq.y * v_texcoord1.zw).xyz; \ + + +void main() +{ + float scale_factor = u_target_size.x / u_tex_size1.x; + + vec2 fp = fract(v_texcoord0 * u_tex_size1.xy) - vec2(0.5, 0.5); // pos = pixel position + + vec4 UL = texture2D(decal, v_texcoord0 + 0.25 * v_texcoord1.xy + 0.25 * v_texcoord1.zw); + vec4 UR = texture2D(decal, v_texcoord0 + 0.75 * v_texcoord1.xy + 0.25 * v_texcoord1.zw); + vec4 DL = texture2D(decal, v_texcoord0 + 0.25 * v_texcoord1.xy + 0.75 * v_texcoord1.zw); + vec4 DR = texture2D(decal, v_texcoord0 + 0.75 * v_texcoord1.xy + 0.75 * v_texcoord1.zw); + + vec4 ulparam = remapFrom01(UL, low, high); // retrieve 1st pass info + vec4 urparam = remapFrom01(UR, low, high); // retrieve 1st pass info + vec4 dlparam = remapFrom01(DL, low, high); // retrieve 1st pass info + vec4 drparam = remapFrom01(DR, low, high); // retrieve 1st pass info + + vec4 E = texture2D(ORIG_texture, v_texcoord0); + + float info, frac_val; + vec2 iq; + vec3 ax, ay, PX, PY, PZ, PW; + GET_PIXEL(ulparam.w, PX); + GET_PIXEL(urparam.w, PY); + GET_PIXEL(dlparam.w, PZ); + GET_PIXEL(drparam.w, PW); + + vec3 fp1 = vec3(fp, -1); + + vec4 inc = vec4(abs(ulparam.x / ulparam.y), abs(urparam.x / urparam.y), abs(dlparam.x / dlparam.y), abs(drparam.x / drparam.y)); + vec4 level = max(inc, 1.0 / inc); + + vec4 fx; + fx.x = saturate(dot(fp1, ulparam.xyz) * scale_factor / (8.0 * level.x) + 0.5); + fx.y = saturate(dot(fp1, urparam.xyz) * scale_factor / (8.0 * level.y) + 0.5); + fx.z = saturate(dot(fp1, dlparam.xyz) * scale_factor / (8.0 * level.z) + 0.5); + fx.w = saturate(dot(fp1, drparam.xyz) * scale_factor / (8.0 * level.w) + 0.5); + + vec3 c1 = mix(E.xyz, PX, fx.x); + vec3 c2 = mix(E.xyz, PY, fx.y); + vec3 c3 = mix(E.xyz, PZ, fx.z); + vec3 c4 = mix(E.xyz, PW, fx.w); + + vec3 color = c1; + color = color_mix(c2, color, E.xyz); + color = color_mix(c3, color, E.xyz); + color = color_mix(c4, color, E.xyz); + + gl_FragColor = vec4(color, 1.0); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/varying.def.sc similarity index 71% rename from src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/varying.def.sc rename to src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/varying.def.sc index c65b5426733..92c3034f498 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr-hybrid/varying.def.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/varying.def.sc @@ -4,6 +4,9 @@ vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord5 : TEXCOORD5 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord6 : TEXCOORD6 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord7 : TEXCOORD7 = 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/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.sc new file mode 100644 index 00000000000..bab183ddd30 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.sc @@ -0,0 +1,52 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass1 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A3 B3 C3 + // A1 B1 C1 + //A2 A0 A B C C4 C6 + //D2 D0 D E F F4 F6 + //G2 G0 G H I I4 I6 + // G5 H5 I5 + // G7 H7 I7 + + v_texcoord1 = 1.0 / u_tex_size0.xyyy; // F H + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.sc new file mode 100644 index 00000000000..71ebf7d574a --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.sc @@ -0,0 +1,59 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texcoord5, v_texcoord6, v_texcoord7, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass2 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +uniform vec4 u_tex_size0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + + vec2 ps = 1.0 / u_tex_size0.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -2.0*dy); // A1 B1 C1 + v_texcoord2 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C + v_texcoord3 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F + v_texcoord4 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, dy); // G H I + v_texcoord5 = v_texcoord0.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5 + v_texcoord6 = v_texcoord0.xyyy + vec4(-2.0*dx, -dy, 0.0, dy); // A0 D0 G0 + v_texcoord7 = v_texcoord0.xyyy + vec4( 2.0*dx, -dy, 0.0, dy); // C4 F4 I4 + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.sc new file mode 100644 index 00000000000..19195ba5b27 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.sc @@ -0,0 +1,55 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass3 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +uniform vec4 u_tex_size1; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A3 B3 C3 + // A1 B1 C1 + //A2 A0 A B C C4 C6 + //D2 D0 D E F F4 F6 + //G2 G0 G H I I4 I6 + // G5 H5 I5 + // G7 H7 I7 + + vec2 ps = 1.0 / u_tex_size1.xy; + float dx = ps.x; + float dy = ps.y; + v_texcoord1 = vec4(dx, 0.0, 0.0, dy); // F H + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.sc new file mode 100644 index 00000000000..bf9f297ec9d --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.sc @@ -0,0 +1,53 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_color0 + +// license:MIT +// copyright-holders:Hyllian + +/* + + Hyllian's xBR MultiLevel4 Shader - Pass4 + + Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +*/ + +#include "common.sh" + +uniform vec4 u_tex_size1; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + + // A3 B3 C3 + // A1 B1 C1 + //A2 A0 A B C C4 C6 + //D2 D0 D E F F4 F6 + //G2 G0 G H I I4 I6 + // G5 H5 I5 + // G7 H7 I7 + + vec2 ps = 1.0 / u_tex_size1.xy; + v_texcoord1 = vec4(ps.x, 0.0, 0.0, ps.y); // F H + v_color0 = a_color0; +}