From 5671484fc87fc11b536a0b0f6cb0efb1e680d489 Mon Sep 17 00:00:00 2001 From: MooglyGuy Date: Sat, 28 Jan 2023 17:59:25 +0100 Subject: [PATCH] Major D3D and BGFX code refactoring and bug fixes: (#10858) [Ryan Holtz] * render/bgfx: Improved clearing and blending. Added prescale support. Fixes MT07586, MT07587, MT08084. * render/bgfx: Fixed blend and tint handling. (Fixes Github #1953). * render/bgfx/blendreader.cpp: Support non-separated blend mode specification for BGFX effects. * render/bgfx: Reworked how horizontally-padded screen textures are handled. Likely fixes MT08512 and MT08505. * render/bgfx: Ensure that a texture's width margin is updated in all cases. * render/d3d/d3dhlsl.cpp: Fixed tinting in HLSL post-processing mode. * render/d3d/d3dhlsl.cpp: Avoid most redundant state-setting calls. Reduces D3D API calls by about 90% on fruit machine drivers. * render/d3d/d3dhlsl.cpp: Assign SourceDims and QuadDims uniforms to only those effects that use them. * machine/laserdsc.cpp: Always add video quad to screen container, adjust tint based on m_videoenable instead. --- bgfx/chains/crt-geom-deluxe.json | 1 - bgfx/chains/crt-geom.json | 1 - bgfx/chains/default.json | 4 +- bgfx/chains/eagle/super-eagle.json | 1 - bgfx/chains/hlsl.json | 2 - bgfx/chains/hqx/hq2x.json | 1 - bgfx/chains/hqx/hq3x.json | 1 - bgfx/chains/hqx/hq4x.json | 1 - bgfx/chains/lcd-grid.json | 1 - bgfx/chains/lut.json | 1 - bgfx/chains/unfiltered.json | 1 - bgfx/chains/xbr/super-2xbr-3d-2p.json | 1 - .../chains/xbr/super-2xbr-3d-3p-smoother.json | 1 - bgfx/chains/xbr/super-4xbr-3d-4p.json | 1 - .../chains/xbr/super-4xbr-3d-6p-smoother.json | 1 - bgfx/chains/xbr/super-xbr-2p.json | 1 - bgfx/chains/xbr/super-xbr-3p-smoother.json | 1 - bgfx/chains/xbr/super-xbr-6p.json | 1 - bgfx/chains/xbr/super-xbr-deposterize.json | 1 - bgfx/chains/xbr/super-xbr-fast-3p.json | 1 - bgfx/chains/xbr/super-xbr-fast-6p.json | 1 - bgfx/chains/xbr/xbr-hybrid.json | 1 - bgfx/chains/xbr/xbr-lv1-noblend.json | 1 - bgfx/chains/xbr/xbr-lv2-3d.json | 1 - .../xbr/xbr-lv2-accuracy-multipass.json | 1 - .../xbr/xbr-lv2-accuracy-smart-blur.json | 1 - bgfx/chains/xbr/xbr-lv2-deposterize.json | 1 - bgfx/chains/xbr/xbr-lv2-fast.json | 1 - bgfx/chains/xbr/xbr-lv2-multipass.json | 1 - bgfx/chains/xbr/xbr-lv2-noblend.json | 1 - bgfx/chains/xbr/xbr-lv2.json | 1 - bgfx/chains/xbr/xbr-lv3-multipass.json | 1 - bgfx/chains/xbr/xbr-lv3-noblend.json | 1 - bgfx/chains/xbr/xbr-lv3.json | 1 - bgfx/chains/xbr/xbr-mlv4-dilation.json | 1 - bgfx/chains/xbr/xbr-mlv4-multipass.json | 1 - bgfx/effects/blurs/smart-blur.json | 7 +- bgfx/effects/crt-geom/crt-geom-deluxe.json | 57 +- bgfx/effects/crt-geom/crt-geom.json | 47 +- bgfx/effects/crt-geom/gaussx.json | 11 +- bgfx/effects/crt-geom/gaussy.json | 11 +- bgfx/effects/crt-geom/lowpass.json | 5 +- bgfx/effects/crt-geom/mipmap8.json | 11 +- bgfx/effects/crt-geom/phosphor_apply.json | 13 +- bgfx/effects/crt-geom/phosphor_update.json | 13 +- bgfx/effects/default/blit.json | 9 +- bgfx/effects/eagle/supereagle.json | 7 +- bgfx/effects/gui_add.json | 3 +- bgfx/effects/gui_blend.json | 3 +- bgfx/effects/gui_multiply.json | 7 +- bgfx/effects/gui_opaque.json | 10 +- bgfx/effects/hlsl/blit.json | 3 +- bgfx/effects/hlsl/chroma.json | 11 +- bgfx/effects/hlsl/color.json | 15 +- bgfx/effects/hlsl/deconverge.json | 15 +- bgfx/effects/hlsl/defocus.json | 7 +- bgfx/effects/hlsl/distortion.json | 3 +- bgfx/effects/hlsl/ntsc_decode.json | 5 +- bgfx/effects/hlsl/ntsc_encode.json | 15 +- bgfx/effects/hlsl/phosphor.json | 9 +- bgfx/effects/hlsl/post.json | 37 +- bgfx/effects/hlsl/prescale.json | 7 +- bgfx/effects/hlsl/scanline.json | 25 +- bgfx/effects/hqx/hq2x.json | 7 +- bgfx/effects/hqx/hq3x.json | 7 +- bgfx/effects/hqx/hq4x.json | 7 +- bgfx/effects/lcd-grid/lcd-grid.json | 27 +- bgfx/effects/lcd-grid/persistence.json | 7 +- bgfx/effects/misc/bcg_adjust.json | 15 +- bgfx/effects/misc/blit.json | 11 +- bgfx/effects/misc/blit_palette16.json | 15 +- bgfx/effects/misc/deposterize-pass0.json | 9 +- bgfx/effects/misc/deposterize-pass1.json | 9 +- bgfx/effects/misc/lut.json | 9 +- bgfx/effects/misc/saturation.json | 5 +- bgfx/effects/misc/texconv_argb32.json | 27 + bgfx/effects/misc/texconv_palette16.json | 20 +- bgfx/effects/misc/texconv_rgb32.json | 16 +- bgfx/effects/misc/texconv_yuy16.json | 18 +- .../pillarbox_left_horizontal/gaussian.json | 9 +- .../pillarbox_left_horizontal/offset_sat.json | 5 +- .../pillarbox_left_vertical/gaussian.json | 9 +- .../pillarbox_left_vertical/offset_sat.json | 5 +- .../pillarbox_right_horizontal/gaussian.json | 9 +- .../offset_sat.json | 5 +- .../pillarbox_right_vertical/gaussian.json | 9 +- .../pillarbox_right_vertical/offset_sat.json | 5 +- bgfx/effects/screen_add.json | 5 +- bgfx/effects/screen_blend.json | 5 +- bgfx/effects/screen_multiply.json | 9 +- bgfx/effects/screen_opaque.json | 10 +- bgfx/effects/unfiltered/blit.json | 3 +- .../warp/dilation-horizontal-fast.json | 5 +- .../xbr/super-xbr/custom-jinc2-sharper.json | 5 +- .../xbr/super-xbr/super-2xbr-3d-pass0.json | 3 +- .../xbr/super-xbr/super-2xbr-3d-pass1.json | 3 +- .../xbr/super-xbr/super-2xbr-3d-pass2.json | 3 +- .../xbr/super-xbr/super-4xbr-3d-pass0.json | 3 +- .../xbr/super-xbr/super-4xbr-3d-pass1.json | 3 +- .../xbr/super-xbr/super-4xbr-3d-pass2.json | 3 +- .../xbr/super-xbr/super-4xbr-3d-pass3.json | 3 +- .../xbr/super-xbr/super-xbr-fast-pass0.json | 3 +- .../xbr/super-xbr/super-xbr-fast-pass1.json | 3 +- .../xbr/super-xbr/super-xbr-fast-pass2.json | 3 +- .../xbr/super-xbr/super-xbr-pass0.json | 3 +- .../xbr/super-xbr/super-xbr-pass1.json | 3 +- .../xbr/super-xbr/super-xbr-pass2.json | 3 +- .../xbr/xbr-hybrid/2xbr-hybrid-sharp.json | 5 +- .../xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json | 5 +- .../xbr/xbr-hybrid/2xbr-hybrid-v2.json | 5 +- .../xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json | 5 +- .../xbr/xbr-hybrid/2xbr-hybrid-v4.json | 5 +- .../xbr/xbr-hybrid/2xbr-hybrid-v4b.json | 5 +- .../xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json | 5 +- bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json | 5 +- bgfx/effects/xbr/xbr-lv1-noblend.json | 3 +- bgfx/effects/xbr/xbr-lv2-3d.json | 3 +- bgfx/effects/xbr/xbr-lv2-fast.json | 3 +- .../xbr-lv2-multipass/xbr-lv2-a-pass0.json | 5 +- .../xbr-lv2-accuracy-pass0.json | 3 +- .../xbr-lv2-accuracy-pass1.json | 11 +- .../xbr-lv2-multipass/xbr-lv2-b-pass0.json | 5 +- .../xbr-lv2-multipass/xbr-lv2-c-pass0.json | 5 +- .../xbr-lv2-multipass/xbr-lv2-d-pass0.json | 5 +- .../xbr-lv2-noblend-pass1.json | 9 +- .../xbr/xbr-lv2-multipass/xbr-lv2-pass1.json | 11 +- bgfx/effects/xbr/xbr-lv2-noblend.json | 3 +- bgfx/effects/xbr/xbr-lv2.json | 3 +- .../xbr/xbr-lv3-multipass/xbr-lv3-pass0.json | 5 +- .../xbr/xbr-lv3-multipass/xbr-lv3-pass1.json | 11 +- bgfx/effects/xbr/xbr-lv3-noblend.json | 3 +- bgfx/effects/xbr/xbr-lv3.json | 3 +- .../xbr-mlv4-multipass/xbr-mlv4-pass1.json | 5 +- .../xbr-mlv4-multipass/xbr-mlv4-pass2.json | 5 +- .../xbr-mlv4-multipass/xbr-mlv4-pass3.json | 7 +- .../xbr-mlv4-multipass/xbr-mlv4-pass4.json | 9 +- .../dx11/chains/crt-geom/fs_crt-geom.bin | Bin 12026 -> 12026 bytes .../dx11/chains/crt-geom/fs_gaussx.bin | Bin 4166 -> 4142 bytes .../dx11/chains/crt-geom/fs_gaussy.bin | Bin 4166 -> 4142 bytes .../dx11/chains/crt-geom/fs_lowpass.bin | Bin 4842 -> 4842 bytes .../dx11/chains/crt-geom/fs_mipmap8.bin | Bin 11983 -> 11999 bytes .../chains/crt-geom/fs_phosphor_apply.bin | Bin 1534 -> 1606 bytes bgfx/shaders/dx11/chains/hlsl/fs_scanline.bin | Bin 2179 -> 2004 bytes .../dx11/chains/misc/vs_resize_blit.bin | Bin 0 -> 673 bytes .../dx9/chains/blurs/vs_smart-blur.bin | Bin 578 -> 672 bytes .../dx9/chains/crt-geom/fs_crt-geom.bin | Bin 7684 -> 7852 bytes .../shaders/dx9/chains/crt-geom/fs_gaussx.bin | Bin 3071 -> 3535 bytes .../shaders/dx9/chains/crt-geom/fs_gaussy.bin | Bin 3071 -> 3535 bytes .../dx9/chains/crt-geom/fs_lowpass.bin | Bin 2088 -> 2088 bytes .../dx9/chains/crt-geom/fs_mipmap8.bin | Bin 8702 -> 8702 bytes .../dx9/chains/crt-geom/fs_phosphor_apply.bin | Bin 1271 -> 1363 bytes .../dx9/chains/crt-geom/vs_crt-geom.bin | Bin 3319 -> 3413 bytes .../shaders/dx9/chains/crt-geom/vs_gaussx.bin | Bin 795 -> 889 bytes .../shaders/dx9/chains/crt-geom/vs_gaussy.bin | Bin 795 -> 889 bytes .../dx9/chains/crt-geom/vs_lowpass.bin | Bin 2891 -> 2981 bytes .../dx9/chains/crt-geom/vs_mipmap8.bin | Bin 292 -> 402 bytes .../dx9/chains/crt-geom/vs_phosphor_apply.bin | Bin 292 -> 402 bytes .../chains/crt-geom/vs_phosphor_update.bin | Bin 292 -> 402 bytes .../dx9/chains/crt/vs_crt-caligari.bin | Bin 476 -> 570 bytes bgfx/shaders/dx9/chains/default/vs_blit.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/eagle/vs_eagle.bin | Bin 910 -> 1004 bytes bgfx/shaders/dx9/chains/hlsl/fs_scanline.bin | Bin 2084 -> 1861 bytes bgfx/shaders/dx9/chains/hlsl/vs_chroma.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/hlsl/vs_color.bin | Bin 328 -> 438 bytes .../shaders/dx9/chains/hlsl/vs_deconverge.bin | Bin 1097 -> 1191 bytes bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin | Bin 328 -> 438 bytes .../shaders/dx9/chains/hlsl/vs_distortion.bin | Bin 328 -> 438 bytes .../dx9/chains/hlsl/vs_ntsc_decode.bin | Bin 328 -> 438 bytes .../dx9/chains/hlsl/vs_ntsc_encode.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/hlsl/vs_post.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/hlsl/vs_scanline.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin | Bin 578 -> 672 bytes bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin | Bin 578 -> 672 bytes bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin | Bin 578 -> 672 bytes .../dx9/chains/lcd-grid/vs_lcd-grid.bin | Bin 328 -> 438 bytes .../dx9/chains/lcd-grid/vs_persistence.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/chains/misc/vs_blit.bin | Bin 328 -> 438 bytes .../misc/vs_bob-and-ghost-deinterlace.bin | Bin 328 -> 438 bytes .../dx9/chains/misc/vs_deposterize-pass0.bin | Bin 502 -> 596 bytes .../dx9/chains/misc/vs_deposterize-pass1.bin | Bin 502 -> 596 bytes bgfx/shaders/dx9/chains/misc/vs_lut.bin | Bin 328 -> 438 bytes .../dx9/chains/misc/vs_resize_blit.bin | Bin 0 -> 522 bytes .../shaders/dx9/chains/misc/vs_saturation.bin | Bin 328 -> 438 bytes .../pillarbox_left_horizontal/vs_gaussian.bin | Bin 328 -> 438 bytes .../vs_offset_sat.bin | Bin 360 -> 470 bytes .../pillarbox_left_vertical/vs_gaussian.bin | Bin 328 -> 438 bytes .../pillarbox_left_vertical/vs_offset_sat.bin | Bin 360 -> 470 bytes .../vs_gaussian.bin | Bin 328 -> 438 bytes .../vs_offset_sat.bin | Bin 360 -> 470 bytes .../pillarbox_right_vertical/vs_gaussian.bin | Bin 328 -> 438 bytes .../vs_offset_sat.bin | Bin 360 -> 470 bytes .../shaders/dx9/chains/unfiltered/vs_blit.bin | Bin 328 -> 438 bytes .../warp/vs_dilation-horizontal-fast.bin | Bin 470 -> 564 bytes .../xbr/super-xbr/vs_custom-jinc2-sharper.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-2xbr-3d-pass0.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-2xbr-3d-pass1.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-2xbr-3d-pass2.bin | Bin 662 -> 756 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass0.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass1.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin | Bin 662 -> 756 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass2.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass3.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin | Bin 662 -> 756 bytes .../xbr/super-xbr/vs_super-xbr-fast-pass0.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-xbr-fast-pass1.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-xbr-fast-pass2.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-xbr-pass0.bin | Bin 634 -> 728 bytes .../xbr/super-xbr/vs_super-xbr-pass1.bin | Bin 328 -> 438 bytes .../xbr/super-xbr/vs_super-xbr-pass2.bin | Bin 662 -> 756 bytes .../xbr/super-xbr/vs_super-xbr-pass3.bin | Bin 662 -> 756 bytes .../dx9/chains/xbr/vs_xbr-lv1-noblend.bin | Bin 494 -> 588 bytes bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin | Bin 744 -> 838 bytes .../dx9/chains/xbr/vs_xbr-lv2-fast.bin | Bin 578 -> 672 bytes .../dx9/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 782 -> 876 bytes bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin | Bin 782 -> 876 bytes .../dx9/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 782 -> 876 bytes bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin | Bin 782 -> 876 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 782 -> 876 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 782 -> 876 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 782 -> 876 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 782 -> 876 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 782 -> 876 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 782 -> 876 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 782 -> 876 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 782 -> 876 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 782 -> 876 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 782 -> 876 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 534 -> 628 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 782 -> 876 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 782 -> 876 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 782 -> 876 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 534 -> 628 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 534 -> 628 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 782 -> 876 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 610 -> 704 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin | Bin 434 -> 528 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 782 -> 876 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin | Bin 470 -> 564 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin | Bin 470 -> 564 bytes bgfx/shaders/dx9/vs_gui.bin | Bin 328 -> 438 bytes bgfx/shaders/dx9/vs_screen.bin | Bin 328 -> 438 bytes .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 18114 -> 18343 bytes .../essl/chains/crt-geom/fs_crt-geom.bin | Bin 14279 -> 14299 bytes .../essl/chains/crt-geom/fs_gaussx.bin | Bin 3787 -> 7428 bytes .../essl/chains/crt-geom/fs_gaussy.bin | Bin 3787 -> 7428 bytes .../essl/chains/crt-geom/fs_lowpass.bin | Bin 6428 -> 6481 bytes .../essl/chains/crt-geom/fs_mipmap8.bin | Bin 20468 -> 20118 bytes .../chains/crt-geom/fs_phosphor_apply.bin | Bin 1532 -> 2113 bytes bgfx/shaders/essl/chains/hlsl/fs_scanline.bin | Bin 3154 -> 2885 bytes .../essl/chains/misc/vs_resize_blit.bin | Bin 0 -> 548 bytes .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 17343 -> 17554 bytes .../glsl/chains/crt-geom/fs_crt-geom.bin | Bin 13604 -> 13624 bytes .../glsl/chains/crt-geom/fs_gaussx.bin | Bin 3645 -> 6919 bytes .../glsl/chains/crt-geom/fs_gaussy.bin | Bin 3645 -> 6919 bytes .../glsl/chains/crt-geom/fs_lowpass.bin | Bin 6127 -> 6178 bytes .../glsl/chains/crt-geom/fs_mipmap8.bin | Bin 19503 -> 19111 bytes .../chains/crt-geom/fs_phosphor_apply.bin | Bin 1451 -> 1935 bytes bgfx/shaders/glsl/chains/hlsl/fs_scanline.bin | Bin 2996 -> 2745 bytes .../glsl/chains/misc/vs_resize_blit.bin | Bin 0 -> 500 bytes .../metal/chains/blurs/vs_smart-blur.bin | Bin 1421 -> 1421 bytes .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 15906 -> 15947 bytes .../metal/chains/crt-geom/fs_crt-geom.bin | Bin 12613 -> 12619 bytes .../metal/chains/crt-geom/fs_gaussx.bin | Bin 3535 -> 4171 bytes .../metal/chains/crt-geom/fs_gaussy.bin | Bin 3535 -> 4171 bytes .../metal/chains/crt-geom/fs_lowpass.bin | Bin 4656 -> 4702 bytes .../metal/chains/crt-geom/fs_mipmap8.bin | Bin 18204 -> 18022 bytes .../chains/crt-geom/fs_phosphor_apply.bin | Bin 1711 -> 1812 bytes .../metal/chains/crt-geom/vs_crt-geom.bin | Bin 4134 -> 4134 bytes .../metal/chains/crt-geom/vs_gaussx.bin | Bin 1227 -> 1227 bytes .../metal/chains/crt-geom/vs_gaussy.bin | Bin 1227 -> 1227 bytes .../metal/chains/crt-geom/vs_lowpass.bin | Bin 3457 -> 3457 bytes bgfx/shaders/metal/chains/eagle/vs_eagle.bin | Bin 2372 -> 2372 bytes .../shaders/metal/chains/hlsl/fs_scanline.bin | Bin 3030 -> 2879 bytes bgfx/shaders/metal/chains/hqx/vs_hq2x.bin | Bin 1421 -> 1421 bytes bgfx/shaders/metal/chains/hqx/vs_hq3x.bin | Bin 1421 -> 1421 bytes bgfx/shaders/metal/chains/hqx/vs_hq4x.bin | Bin 1421 -> 1421 bytes .../chains/misc/vs_deposterize-pass0.bin | Bin 1174 -> 1174 bytes .../chains/misc/vs_deposterize-pass1.bin | Bin 1174 -> 1174 bytes .../metal/chains/misc/vs_resize_blit.bin | Bin 0 -> 966 bytes .../xbr/super-xbr/vs_super-2xbr-3d-pass2.bin | Bin 1630 -> 1630 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin | Bin 1630 -> 1630 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin | Bin 1630 -> 1630 bytes .../xbr/super-xbr/vs_super-xbr-pass0.bin | Bin 1618 -> 1618 bytes .../xbr/super-xbr/vs_super-xbr-pass2.bin | Bin 1630 -> 1630 bytes .../xbr/super-xbr/vs_super-xbr-pass3.bin | Bin 1630 -> 1630 bytes .../metal/chains/xbr/vs_xbr-lv1-noblend.bin | Bin 1070 -> 1070 bytes .../metal/chains/xbr/vs_xbr-lv2-3d.bin | Bin 2124 -> 2124 bytes .../metal/chains/xbr/vs_xbr-lv2-fast.bin | Bin 1421 -> 1421 bytes .../metal/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 2080 -> 2080 bytes bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.bin | Bin 2080 -> 2080 bytes .../metal/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 2080 -> 2080 bytes bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin | Bin 2080 -> 2080 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 2080 -> 2080 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 2080 -> 2080 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 2080 -> 2080 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 2080 -> 2080 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 2080 -> 2080 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 2080 -> 2080 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 2080 -> 2080 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 2080 -> 2080 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 2080 -> 2080 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 2080 -> 2080 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 1288 -> 1288 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 2080 -> 2080 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 2080 -> 2080 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 2080 -> 2080 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 1288 -> 1288 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 1288 -> 1288 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 2080 -> 2080 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 1336 -> 1336 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 2080 -> 2080 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin | Bin 1068 -> 1068 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin | Bin 1068 -> 1068 bytes .../spirv/chains/blurs/vs_smart-blur.bin | Bin 2083 -> 2083 bytes .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 24512 -> 24496 bytes .../spirv/chains/crt-geom/fs_crt-geom.bin | Bin 19139 -> 19163 bytes .../spirv/chains/crt-geom/fs_gaussx.bin | Bin 7106 -> 6598 bytes .../spirv/chains/crt-geom/fs_gaussy.bin | Bin 7122 -> 6614 bytes .../spirv/chains/crt-geom/fs_lowpass.bin | Bin 7607 -> 7667 bytes .../spirv/chains/crt-geom/fs_mipmap8.bin | Bin 25863 -> 24663 bytes .../chains/crt-geom/fs_phosphor_apply.bin | Bin 3002 -> 2850 bytes .../spirv/chains/crt-geom/vs_crt-geom.bin | Bin 8328 -> 8328 bytes .../spirv/chains/crt-geom/vs_gaussx.bin | Bin 2152 -> 2152 bytes .../spirv/chains/crt-geom/vs_gaussy.bin | Bin 2168 -> 2168 bytes .../spirv/chains/crt-geom/vs_lowpass.bin | Bin 4424 -> 4424 bytes .../spirv/chains/crt-geom/vs_mipmap8.bin | Bin 1085 -> 1085 bytes .../chains/crt-geom/vs_phosphor_apply.bin | Bin 1085 -> 1085 bytes .../chains/crt-geom/vs_phosphor_update.bin | Bin 1085 -> 1085 bytes .../spirv/chains/crt/vs_crt-caligari.bin | Bin 1649 -> 1649 bytes bgfx/shaders/spirv/chains/default/vs_blit.bin | Bin 1257 -> 1257 bytes bgfx/shaders/spirv/chains/eagle/vs_eagle.bin | Bin 3879 -> 3879 bytes .../shaders/spirv/chains/hlsl/fs_scanline.bin | Bin 5259 -> 4852 bytes bgfx/shaders/spirv/chains/hlsl/vs_chroma.bin | Bin 1257 -> 1257 bytes bgfx/shaders/spirv/chains/hlsl/vs_color.bin | Bin 1257 -> 1257 bytes .../spirv/chains/hlsl/vs_deconverge.bin | Bin 3246 -> 3246 bytes bgfx/shaders/spirv/chains/hlsl/vs_defocus.bin | Bin 1257 -> 1257 bytes .../spirv/chains/hlsl/vs_distortion.bin | Bin 1257 -> 1257 bytes .../spirv/chains/hlsl/vs_ntsc_decode.bin | Bin 1257 -> 1257 bytes .../spirv/chains/hlsl/vs_ntsc_encode.bin | Bin 1257 -> 1257 bytes .../shaders/spirv/chains/hlsl/vs_phosphor.bin | Bin 1257 -> 1257 bytes bgfx/shaders/spirv/chains/hlsl/vs_post.bin | Bin 1257 -> 1257 bytes .../shaders/spirv/chains/hlsl/vs_prescale.bin | Bin 1257 -> 1257 bytes .../shaders/spirv/chains/hlsl/vs_scanline.bin | Bin 1257 -> 1257 bytes bgfx/shaders/spirv/chains/hqx/vs_hq2x.bin | Bin 2083 -> 2083 bytes bgfx/shaders/spirv/chains/hqx/vs_hq3x.bin | Bin 2083 -> 2083 bytes bgfx/shaders/spirv/chains/hqx/vs_hq4x.bin | Bin 2083 -> 2083 bytes .../spirv/chains/lcd-grid/vs_lcd-grid.bin | Bin 1257 -> 1257 bytes .../spirv/chains/lcd-grid/vs_persistence.bin | Bin 1257 -> 1257 bytes bgfx/shaders/spirv/chains/misc/vs_blit.bin | Bin 1257 -> 1257 bytes .../misc/vs_bob-and-ghost-deinterlace.bin | Bin 1257 -> 1257 bytes .../chains/misc/vs_deposterize-pass0.bin | Bin 1727 -> 1727 bytes .../chains/misc/vs_deposterize-pass1.bin | Bin 1727 -> 1727 bytes bgfx/shaders/spirv/chains/misc/vs_lut.bin | Bin 1257 -> 1257 bytes .../spirv/chains/misc/vs_resize_blit.bin | Bin 0 -> 1609 bytes .../spirv/chains/misc/vs_saturation.bin | Bin 1257 -> 1257 bytes .../pillarbox_left_horizontal/vs_gaussian.bin | Bin 1257 -> 1257 bytes .../vs_offset_sat.bin | Bin 1377 -> 1377 bytes .../pillarbox_left_vertical/vs_gaussian.bin | Bin 1257 -> 1257 bytes .../pillarbox_left_vertical/vs_offset_sat.bin | Bin 1377 -> 1377 bytes .../vs_gaussian.bin | Bin 1257 -> 1257 bytes .../vs_offset_sat.bin | Bin 1393 -> 1393 bytes .../pillarbox_right_vertical/vs_gaussian.bin | Bin 1257 -> 1257 bytes .../vs_offset_sat.bin | Bin 1393 -> 1393 bytes .../spirv/chains/unfiltered/vs_blit.bin | Bin 1257 -> 1257 bytes .../warp/vs_dilation-horizontal-fast.bin | Bin 1619 -> 1619 bytes .../xbr/super-xbr/vs_custom-jinc2-sharper.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-2xbr-3d-pass0.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-2xbr-3d-pass1.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-2xbr-3d-pass2.bin | Bin 2351 -> 2351 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass0.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass1.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin | Bin 2351 -> 2351 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass2.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass3.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin | Bin 2351 -> 2351 bytes .../xbr/super-xbr/vs_super-xbr-fast-pass0.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-xbr-fast-pass1.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-xbr-fast-pass2.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-xbr-pass0.bin | Bin 2351 -> 2351 bytes .../xbr/super-xbr/vs_super-xbr-pass1.bin | Bin 1257 -> 1257 bytes .../xbr/super-xbr/vs_super-xbr-pass2.bin | Bin 2351 -> 2351 bytes .../xbr/super-xbr/vs_super-xbr-pass3.bin | Bin 2351 -> 2351 bytes .../spirv/chains/xbr/vs_xbr-lv1-noblend.bin | Bin 1651 -> 1651 bytes .../spirv/chains/xbr/vs_xbr-lv2-3d.bin | Bin 3069 -> 3069 bytes .../spirv/chains/xbr/vs_xbr-lv2-fast.bin | Bin 2083 -> 2083 bytes .../spirv/chains/xbr/vs_xbr-lv2-noblend.bin | Bin 2947 -> 2947 bytes bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2.bin | Bin 2947 -> 2947 bytes .../spirv/chains/xbr/vs_xbr-lv3-noblend.bin | Bin 2947 -> 2947 bytes bgfx/shaders/spirv/chains/xbr/vs_xbr-lv3.bin | Bin 2947 -> 2947 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin | Bin 2947 -> 2947 bytes .../xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin | Bin 2947 -> 2947 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin | Bin 2947 -> 2947 bytes .../xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin | Bin 2947 -> 2947 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin | Bin 2947 -> 2947 bytes .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin | Bin 2947 -> 2947 bytes .../xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin | Bin 2947 -> 2947 bytes .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin | Bin 2947 -> 2947 bytes .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin | Bin 2947 -> 2947 bytes .../vs_xbr-lv2-accuracy-pass0.bin | Bin 2947 -> 2947 bytes .../vs_xbr-lv2-accuracy-pass1.bin | Bin 1879 -> 1879 bytes .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin | Bin 2947 -> 2947 bytes .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin | Bin 2947 -> 2947 bytes .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin | Bin 2947 -> 2947 bytes .../vs_xbr-lv2-noblend-pass1.bin | Bin 1879 -> 1879 bytes .../xbr-lv2-multipass/vs_xbr-lv2-pass1.bin | Bin 1879 -> 1879 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass0.bin | Bin 2947 -> 2947 bytes .../xbr-lv3-multipass/vs_xbr-lv3-pass1.bin | Bin 2111 -> 2111 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin | Bin 1567 -> 1567 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin | Bin 2947 -> 2947 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin | Bin 1619 -> 1619 bytes .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin | Bin 1619 -> 1619 bytes bgfx/shaders/spirv/vs_gui.bin | Bin 1257 -> 1257 bytes bgfx/shaders/spirv/vs_screen.bin | Bin 1257 -> 1257 bytes hlsl/bloom.fx | 26 +- hlsl/color.fx | 4 +- hlsl/deconverge.fx | 8 +- hlsl/distortion.fx | 8 +- hlsl/downsample.fx | 12 +- hlsl/focus.fx | 11 +- hlsl/post.fx | 4 +- hlsl/prescale.fx | 31 ++ hlsl/primary.fx | 32 ++ hlsl/scanline.fx | 13 +- src/devices/machine/laserdsc.cpp | 6 +- src/emu/render.cpp | 1 + src/emu/render.h | 1 + src/osd/modules/render/bgfx/blendreader.cpp | 11 +- src/osd/modules/render/bgfx/chain.cpp | 19 +- src/osd/modules/render/bgfx/chain.h | 4 +- src/osd/modules/render/bgfx/chainentry.cpp | 97 ++-- src/osd/modules/render/bgfx/chainentry.h | 14 +- src/osd/modules/render/bgfx/chainmanager.cpp | 113 +++- src/osd/modules/render/bgfx/chainmanager.h | 15 +- src/osd/modules/render/bgfx/chainreader.cpp | 4 +- src/osd/modules/render/bgfx/chainreader.h | 2 +- src/osd/modules/render/bgfx/effect.cpp | 10 +- src/osd/modules/render/bgfx/effect.h | 5 +- src/osd/modules/render/bgfx/effectmanager.cpp | 2 +- src/osd/modules/render/bgfx/effectreader.cpp | 4 +- src/osd/modules/render/bgfx/effectreader.h | 2 +- src/osd/modules/render/bgfx/inputpair.cpp | 15 +- .../shaders/chains/blurs/vs_smart-blur.sc | 4 + .../chains/crt-geom/fs_crt-geom-deluxe.sc | 14 +- .../shaders/chains/crt-geom/fs_crt-geom.sc | 6 +- .../bgfx/shaders/chains/crt-geom/fs_gaussx.sc | 38 +- .../bgfx/shaders/chains/crt-geom/fs_gaussy.sc | 38 +- .../shaders/chains/crt-geom/fs_lowpass.sc | 2 +- .../shaders/chains/crt-geom/fs_mipmap8.sc | 24 +- .../chains/crt-geom/fs_phosphor_apply.sc | 10 +- .../shaders/chains/crt-geom/vs_crt-geom.sc | 102 ++-- .../bgfx/shaders/chains/crt-geom/vs_gaussx.sc | 16 +- .../bgfx/shaders/chains/crt-geom/vs_gaussy.sc | 16 +- .../shaders/chains/crt-geom/vs_lowpass.sc | 72 +-- .../shaders/chains/crt-geom/vs_mipmap8.sc | 11 +- .../chains/crt-geom/vs_phosphor_apply.sc | 11 +- .../chains/crt-geom/vs_phosphor_update.sc | 11 +- .../shaders/chains/crt/vs_crt-caligari.sc | 4 + .../bgfx/shaders/chains/default/vs_blit.sc | 5 + .../bgfx/shaders/chains/eagle/vs_eagle.sc | 4 + .../bgfx/shaders/chains/hlsl/fs_scanline.sc | 27 +- .../bgfx/shaders/chains/hlsl/vs_chroma.sc | 5 + .../bgfx/shaders/chains/hlsl/vs_color.sc | 5 + .../bgfx/shaders/chains/hlsl/vs_deconverge.sc | 4 + .../bgfx/shaders/chains/hlsl/vs_defocus.sc | 5 + .../bgfx/shaders/chains/hlsl/vs_distortion.sc | 5 + .../shaders/chains/hlsl/vs_ntsc_decode.sc | 5 + .../shaders/chains/hlsl/vs_ntsc_encode.sc | 5 + .../bgfx/shaders/chains/hlsl/vs_phosphor.sc | 5 + .../bgfx/shaders/chains/hlsl/vs_post.sc | 5 + .../bgfx/shaders/chains/hlsl/vs_prescale.sc | 5 + .../bgfx/shaders/chains/hlsl/vs_scanline.sc | 5 + .../render/bgfx/shaders/chains/hqx/vs_hq2x.sc | 4 + .../render/bgfx/shaders/chains/hqx/vs_hq3x.sc | 4 + .../render/bgfx/shaders/chains/hqx/vs_hq4x.sc | 4 + .../shaders/chains/lcd-grid/vs_lcd-grid.sc | 5 + .../shaders/chains/lcd-grid/vs_persistence.sc | 5 + .../bgfx/shaders/chains/misc/vs_blit.sc | 5 + .../misc/vs_bob-and-ghost-deinterlace.sc | 5 + .../chains/misc/vs_deposterize-pass0.sc | 4 + .../chains/misc/vs_deposterize-pass1.sc | 4 + .../render/bgfx/shaders/chains/misc/vs_lut.sc | 5 + .../shaders/chains/misc/vs_resize_blit.sc | 21 + .../bgfx/shaders/chains/misc/vs_saturation.sc | 5 + .../pillarbox_left_horizontal/vs_gaussian.sc | 5 + .../vs_offset_sat.sc | 7 +- .../pillarbox_left_vertical/vs_gaussian.sc | 5 + .../pillarbox_left_vertical/vs_offset_sat.sc | 7 +- .../pillarbox_right_horizontal/vs_gaussian.sc | 5 + .../vs_offset_sat.sc | 7 +- .../pillarbox_right_vertical/vs_gaussian.sc | 5 + .../pillarbox_right_vertical/vs_offset_sat.sc | 7 +- .../bgfx/shaders/chains/unfiltered/vs_blit.sc | 5 + .../warp/vs_dilation-horizontal-fast.sc | 4 + .../xbr/super-xbr/vs_custom-jinc2-sharper.sc | 5 + .../xbr/super-xbr/vs_super-2xbr-3d-pass0.sc | 5 + .../xbr/super-xbr/vs_super-2xbr-3d-pass1.sc | 5 + .../xbr/super-xbr/vs_super-2xbr-3d-pass2.sc | 4 + .../xbr/super-xbr/vs_super-4xbr-3d-pass0.sc | 5 + .../xbr/super-xbr/vs_super-4xbr-3d-pass1.sc | 5 + .../xbr/super-xbr/vs_super-4xbr-3d-pass1f.sc | 4 + .../xbr/super-xbr/vs_super-4xbr-3d-pass2.sc | 5 + .../xbr/super-xbr/vs_super-4xbr-3d-pass3.sc | 5 + .../xbr/super-xbr/vs_super-4xbr-3d-pass3f.sc | 4 + .../xbr/super-xbr/vs_super-xbr-fast-pass0.sc | 5 + .../xbr/super-xbr/vs_super-xbr-fast-pass1.sc | 5 + .../xbr/super-xbr/vs_super-xbr-fast-pass2.sc | 5 + .../xbr/super-xbr/vs_super-xbr-pass0.sc | 4 + .../xbr/super-xbr/vs_super-xbr-pass1.sc | 5 + .../xbr/super-xbr/vs_super-xbr-pass2.sc | 4 + .../xbr/super-xbr/vs_super-xbr-pass3.sc | 4 + .../shaders/chains/xbr/vs_xbr-lv1-noblend.sc | 4 + .../bgfx/shaders/chains/xbr/vs_xbr-lv2-3d.sc | 4 + .../shaders/chains/xbr/vs_xbr-lv2-fast.sc | 4 + .../shaders/chains/xbr/vs_xbr-lv2-noblend.sc | 4 + .../bgfx/shaders/chains/xbr/vs_xbr-lv2.sc | 4 + .../shaders/chains/xbr/vs_xbr-lv3-noblend.sc | 4 + .../bgfx/shaders/chains/xbr/vs_xbr-lv3.sc | 4 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.sc | 4 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.sc | 4 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-v2.sc | 4 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.sc | 4 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4.sc | 4 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.sc | 4 + .../xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.sc | 4 + .../chains/xbr/xbr-hybrid/vs_2xbr-hybrid.sc | 4 + .../xbr-lv2-multipass/vs_xbr-lv2-a-pass0.sc | 4 + .../vs_xbr-lv2-accuracy-pass0.sc | 4 + .../vs_xbr-lv2-accuracy-pass1.sc | 4 + .../xbr-lv2-multipass/vs_xbr-lv2-b-pass0.sc | 4 + .../xbr-lv2-multipass/vs_xbr-lv2-c-pass0.sc | 4 + .../xbr-lv2-multipass/vs_xbr-lv2-d-pass0.sc | 4 + .../vs_xbr-lv2-noblend-pass1.sc | 4 + .../xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.sc | 4 + .../xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.sc | 4 + .../xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.sc | 4 + .../xbr-mlv4-multipass/vs_xbr-mlv4-pass1.sc | 4 + .../xbr-mlv4-multipass/vs_xbr-mlv4-pass2.sc | 4 + .../xbr-mlv4-multipass/vs_xbr-mlv4-pass3.sc | 4 + .../xbr-mlv4-multipass/vs_xbr-mlv4-pass4.sc | 4 + src/osd/modules/render/bgfx/shaders/vs_gui.sc | 5 + .../modules/render/bgfx/shaders/vs_screen.sc | 5 + src/osd/modules/render/bgfx/statereader.cpp | 14 +- src/osd/modules/render/bgfx/statereader.h | 7 + src/osd/modules/render/bgfx/target.cpp | 11 +- src/osd/modules/render/bgfx/target.h | 14 +- src/osd/modules/render/bgfx/targetmanager.cpp | 42 +- src/osd/modules/render/bgfx/targetmanager.h | 11 +- src/osd/modules/render/bgfx/targetreader.cpp | 26 +- src/osd/modules/render/bgfx/targetreader.h | 2 +- src/osd/modules/render/bgfx/texture.cpp | 9 +- src/osd/modules/render/bgfx/texture.h | 8 +- .../render/bgfx/texturehandleprovider.h | 1 + .../modules/render/bgfx/texturemanager.cpp | 22 +- src/osd/modules/render/bgfx/texturemanager.h | 6 +- src/osd/modules/render/bgfx/uniformreader.cpp | 4 +- src/osd/modules/render/bgfx/view.h | 2 +- src/osd/modules/render/bgfxutil.cpp | 34 +- src/osd/modules/render/bgfxutil.h | 3 +- src/osd/modules/render/binpacker.h | 36 +- src/osd/modules/render/d3d/d3dcomm.h | 7 +- src/osd/modules/render/d3d/d3dhlsl.cpp | 499 +++++++++++------- src/osd/modules/render/d3d/d3dhlsl.h | 37 +- src/osd/modules/render/drawbgfx.cpp | 94 +++- src/osd/modules/render/drawbgfx.h | 9 +- src/osd/modules/render/drawd3d.cpp | 81 ++- 567 files changed, 2077 insertions(+), 1087 deletions(-) create mode 100644 bgfx/effects/misc/texconv_argb32.json create mode 100644 bgfx/shaders/dx11/chains/misc/vs_resize_blit.bin create mode 100644 bgfx/shaders/dx9/chains/misc/vs_resize_blit.bin create mode 100644 bgfx/shaders/essl/chains/misc/vs_resize_blit.bin create mode 100644 bgfx/shaders/glsl/chains/misc/vs_resize_blit.bin create mode 100644 bgfx/shaders/metal/chains/misc/vs_resize_blit.bin create mode 100644 bgfx/shaders/spirv/chains/misc/vs_resize_blit.bin create mode 100644 src/osd/modules/render/bgfx/shaders/chains/misc/vs_resize_blit.sc diff --git a/bgfx/chains/crt-geom-deluxe.json b/bgfx/chains/crt-geom-deluxe.json index 9978c2279a8..f138845c774 100644 --- a/bgfx/chains/crt-geom-deluxe.json +++ b/bgfx/chains/crt-geom-deluxe.json @@ -283,7 +283,6 @@ }, { "effect": "crt-geom/phosphor_apply", - "applytint": true, "name": "phosphor apply", "uniforms": [ { "uniform": "u_phosphor_power", "slider": "phosphor_power" }, diff --git a/bgfx/chains/crt-geom.json b/bgfx/chains/crt-geom.json index 34cccc2d040..da6fb4e3e2c 100644 --- a/bgfx/chains/crt-geom.json +++ b/bgfx/chains/crt-geom.json @@ -163,7 +163,6 @@ "passes": [ { "effect": "crt-geom/crt-geom", - "applytint": true, "name": "CRT", "uniforms": [ { "uniform": "curvature", "slider": "curvature" }, diff --git a/bgfx/chains/default.json b/bgfx/chains/default.json index 5df37df64c7..44110127cf2 100644 --- a/bgfx/chains/default.json +++ b/bgfx/chains/default.json @@ -3,12 +3,12 @@ "targets": [ { "name": "temp", "mode": "guest", - "bilinear": true + "bilinear": true, + "user_prescale": true } ], "passes": [ { "effect": "misc/blit", - "applytint": true, "name": "Copy To Filtered Texture", "input": [ { "sampler": "s_tex", "texture": "screen" } diff --git a/bgfx/chains/eagle/super-eagle.json b/bgfx/chains/eagle/super-eagle.json index 64cf0a38244..6eb46bb89a6 100644 --- a/bgfx/chains/eagle/super-eagle.json +++ b/bgfx/chains/eagle/super-eagle.json @@ -26,7 +26,6 @@ "passes": [ { "effect": "eagle/supereagle", - "applytint": true, "name": "Super Eagle pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/hlsl.json b/bgfx/chains/hlsl.json index 3164339ff0b..59b56153f44 100644 --- a/bgfx/chains/hlsl.json +++ b/bgfx/chains/hlsl.json @@ -204,7 +204,6 @@ "input": [ { "sampler": "s_tex", "texture": "screen" } ], - "applytint": true, "output": "ntsc" }, { @@ -349,7 +348,6 @@ "input": [ { "sampler": "s_tex", "texture": "screen" } ], - "applytint": true, "output": "guest" }, { "effect": "hlsl/color", diff --git a/bgfx/chains/hqx/hq2x.json b/bgfx/chains/hqx/hq2x.json index 8f500549181..f26f773ad39 100644 --- a/bgfx/chains/hqx/hq2x.json +++ b/bgfx/chains/hqx/hq2x.json @@ -43,7 +43,6 @@ "passes": [ { "effect": "hqx/hq2x", - "applytint": true, "name": "HQ2x pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/hqx/hq3x.json b/bgfx/chains/hqx/hq3x.json index 119946414f5..d06b3d6a499 100644 --- a/bgfx/chains/hqx/hq3x.json +++ b/bgfx/chains/hqx/hq3x.json @@ -43,7 +43,6 @@ "passes": [ { "effect": "hqx/hq3x", - "applytint": true, "name": "HQ3x pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/hqx/hq4x.json b/bgfx/chains/hqx/hq4x.json index 9ba3f2edcdd..347ff1c18b5 100644 --- a/bgfx/chains/hqx/hq4x.json +++ b/bgfx/chains/hqx/hq4x.json @@ -43,7 +43,6 @@ "passes": [ { "effect": "hqx/hq4x", - "applytint": true, "name": "HQ4x pass", "input": [ { "sampler": "decal", "texture": "screen" }, diff --git a/bgfx/chains/lcd-grid.json b/bgfx/chains/lcd-grid.json index d12e7a26b4d..4e103640e93 100644 --- a/bgfx/chains/lcd-grid.json +++ b/bgfx/chains/lcd-grid.json @@ -123,7 +123,6 @@ }, { "effect": "lcd-grid/lcd-grid", - "applytint": true, "name": "LCD", "uniforms": [ { "uniform": "u_rsubpix", "slider": "rsubpix" }, diff --git a/bgfx/chains/lut.json b/bgfx/chains/lut.json index 6143410f009..50353b5292b 100644 --- a/bgfx/chains/lut.json +++ b/bgfx/chains/lut.json @@ -10,7 +10,6 @@ "passes": [ { "effect": "misc/blit", - "applytint": true, "name": "Copy To Filtered Texture", "input": [ { "sampler": "s_tex", "texture": "screen" } diff --git a/bgfx/chains/unfiltered.json b/bgfx/chains/unfiltered.json index d17a01f412b..ee64121dabd 100644 --- a/bgfx/chains/unfiltered.json +++ b/bgfx/chains/unfiltered.json @@ -2,7 +2,6 @@ "author": "Ryan Holtz", "passes": [ { "effect": "misc/blit", - "applytint": true, "name": "Unfiltered Upscale", "input": [ { "sampler": "s_tex", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-2xbr-3d-2p.json b/bgfx/chains/xbr/super-2xbr-3d-2p.json index 3f998786625..973ed3bbb1c 100644 --- a/bgfx/chains/xbr/super-2xbr-3d-2p.json +++ b/bgfx/chains/xbr/super-2xbr-3d-2p.json @@ -42,7 +42,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-2xbr-3d-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json b/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json index 37144fb1acc..7748d77a411 100644 --- a/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json +++ b/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json @@ -42,7 +42,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-2xbr-3d-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-4xbr-3d-4p.json b/bgfx/chains/xbr/super-4xbr-3d-4p.json index d88fcfff279..ea52a34aa14 100644 --- a/bgfx/chains/xbr/super-4xbr-3d-4p.json +++ b/bgfx/chains/xbr/super-4xbr-3d-4p.json @@ -42,7 +42,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-4xbr-3d-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json b/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json index 53cd24c0210..0089a92eec9 100644 --- a/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json +++ b/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json @@ -42,7 +42,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-4xbr-3d-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-xbr-2p.json b/bgfx/chains/xbr/super-xbr-2p.json index f733ab21610..df66e7dfa96 100644 --- a/bgfx/chains/xbr/super-xbr-2p.json +++ b/bgfx/chains/xbr/super-xbr-2p.json @@ -49,7 +49,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-xbr-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-xbr-3p-smoother.json b/bgfx/chains/xbr/super-xbr-3p-smoother.json index f7d2bf5165e..7c53a8f0fea 100644 --- a/bgfx/chains/xbr/super-xbr-3p-smoother.json +++ b/bgfx/chains/xbr/super-xbr-3p-smoother.json @@ -49,7 +49,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-xbr-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-xbr-6p.json b/bgfx/chains/xbr/super-xbr-6p.json index cffd4d24a26..f0e3d4e4c9e 100644 --- a/bgfx/chains/xbr/super-xbr-6p.json +++ b/bgfx/chains/xbr/super-xbr-6p.json @@ -63,7 +63,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-xbr-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-xbr-deposterize.json b/bgfx/chains/xbr/super-xbr-deposterize.json index 4010e7f1215..e3543ae41af 100644 --- a/bgfx/chains/xbr/super-xbr-deposterize.json +++ b/bgfx/chains/xbr/super-xbr-deposterize.json @@ -48,7 +48,6 @@ "passes": [ { "effect": "misc/deposterize-pass0", - "applytint": true, "name": "Deposterize, Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-xbr-fast-3p.json b/bgfx/chains/xbr/super-xbr-fast-3p.json index 7ccf13b1669..472a3cd5413 100644 --- a/bgfx/chains/xbr/super-xbr-fast-3p.json +++ b/bgfx/chains/xbr/super-xbr-fast-3p.json @@ -42,7 +42,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-xbr-fast-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/super-xbr-fast-6p.json b/bgfx/chains/xbr/super-xbr-fast-6p.json index a7d32c22907..cfdc3779a8b 100644 --- a/bgfx/chains/xbr/super-xbr-fast-6p.json +++ b/bgfx/chains/xbr/super-xbr-fast-6p.json @@ -55,7 +55,6 @@ "passes": [ { "effect": "xbr/super-xbr/super-xbr-fast-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "s0", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-hybrid.json b/bgfx/chains/xbr/xbr-hybrid.json index 963283618cc..b61095aaf36 100644 --- a/bgfx/chains/xbr/xbr-hybrid.json +++ b/bgfx/chains/xbr/xbr-hybrid.json @@ -22,7 +22,6 @@ "passes": [ { "effect": "xbr/xbr-hybrid/2xbr-hybrid-v4b", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv1-noblend.json b/bgfx/chains/xbr/xbr-lv1-noblend.json index 123dc565582..216edc4b0a6 100644 --- a/bgfx/chains/xbr/xbr-lv1-noblend.json +++ b/bgfx/chains/xbr/xbr-lv1-noblend.json @@ -32,7 +32,6 @@ "passes": [ { "effect": "xbr/xbr-lv1-noblend", - "applytint": true, "name": "Main Pass", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2-3d.json b/bgfx/chains/xbr/xbr-lv2-3d.json index 048f72e8e04..29a3ef24276 100644 --- a/bgfx/chains/xbr/xbr-lv2-3d.json +++ b/bgfx/chains/xbr/xbr-lv2-3d.json @@ -32,7 +32,6 @@ "passes": [ { "effect": "xbr/xbr-lv2-3d", - "applytint": true, "name": "Main Pass", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json b/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json index 5258f7c9840..1e14d28ece0 100644 --- a/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json +++ b/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json @@ -41,7 +41,6 @@ "passes": [ { "effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json b/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json index b6e8ea3c8e4..5a7fffdb46e 100644 --- a/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json +++ b/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json @@ -21,7 +21,6 @@ "passes": [ { "effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2-deposterize.json b/bgfx/chains/xbr/xbr-lv2-deposterize.json index 7451cd54ab4..63c55bd28cd 100644 --- a/bgfx/chains/xbr/xbr-lv2-deposterize.json +++ b/bgfx/chains/xbr/xbr-lv2-deposterize.json @@ -15,7 +15,6 @@ "passes": [ { "effect": "misc/deposterize-pass0", - "applytint": true, "name": "Deposterize, Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2-fast.json b/bgfx/chains/xbr/xbr-lv2-fast.json index 26bcce5ef0b..466295b3d38 100644 --- a/bgfx/chains/xbr/xbr-lv2-fast.json +++ b/bgfx/chains/xbr/xbr-lv2-fast.json @@ -32,7 +32,6 @@ "passes": [ { "effect": "xbr/xbr-lv2-fast", - "applytint": true, "name": "Main Pass", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2-multipass.json b/bgfx/chains/xbr/xbr-lv2-multipass.json index 2dd34a9b9d3..287afbe8825 100644 --- a/bgfx/chains/xbr/xbr-lv2-multipass.json +++ b/bgfx/chains/xbr/xbr-lv2-multipass.json @@ -42,7 +42,6 @@ "passes": [ { "effect": "xbr/xbr-lv2-multipass/xbr-lv2-c-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2-noblend.json b/bgfx/chains/xbr/xbr-lv2-noblend.json index db08feb2647..0721e6a903b 100644 --- a/bgfx/chains/xbr/xbr-lv2-noblend.json +++ b/bgfx/chains/xbr/xbr-lv2-noblend.json @@ -32,7 +32,6 @@ "passes": [ { "effect": "xbr/xbr-lv2-noblend", - "applytint": true, "name": "Main Pass", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv2.json b/bgfx/chains/xbr/xbr-lv2.json index 3f589d734fe..49019d422b4 100644 --- a/bgfx/chains/xbr/xbr-lv2.json +++ b/bgfx/chains/xbr/xbr-lv2.json @@ -32,7 +32,6 @@ "passes": [ { "effect": "xbr/xbr-lv2", - "applytint": true, "name": "Main Pass", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv3-multipass.json b/bgfx/chains/xbr/xbr-lv3-multipass.json index ac63612b704..6e9f49b8ebb 100644 --- a/bgfx/chains/xbr/xbr-lv3-multipass.json +++ b/bgfx/chains/xbr/xbr-lv3-multipass.json @@ -42,7 +42,6 @@ "passes": [ { "effect": "xbr/xbr-lv3-multipass/xbr-lv3-pass0", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv3-noblend.json b/bgfx/chains/xbr/xbr-lv3-noblend.json index 8f5b3ac2e2e..9e8e788d5fa 100644 --- a/bgfx/chains/xbr/xbr-lv3-noblend.json +++ b/bgfx/chains/xbr/xbr-lv3-noblend.json @@ -32,7 +32,6 @@ "passes": [ { "effect": "xbr/xbr-lv3-noblend", - "applytint": true, "name": "Main Pass", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-lv3.json b/bgfx/chains/xbr/xbr-lv3.json index ddeb80874c9..1bb2352fe76 100644 --- a/bgfx/chains/xbr/xbr-lv3.json +++ b/bgfx/chains/xbr/xbr-lv3.json @@ -32,7 +32,6 @@ "passes": [ { "effect": "xbr/xbr-lv3", - "applytint": true, "name": "Main Pass", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-mlv4-dilation.json b/bgfx/chains/xbr/xbr-mlv4-dilation.json index 3ce4926ca8b..e9d80f8fb19 100644 --- a/bgfx/chains/xbr/xbr-mlv4-dilation.json +++ b/bgfx/chains/xbr/xbr-mlv4-dilation.json @@ -56,7 +56,6 @@ "passes": [ { "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass1", - "applytint": true, "name": "Pass 1", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/chains/xbr/xbr-mlv4-multipass.json b/bgfx/chains/xbr/xbr-mlv4-multipass.json index 2eb09a7f87d..64838263e22 100644 --- a/bgfx/chains/xbr/xbr-mlv4-multipass.json +++ b/bgfx/chains/xbr/xbr-mlv4-multipass.json @@ -49,7 +49,6 @@ "passes": [ { "effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass1", - "applytint": true, "name": "Pass 0", "input": [ { "sampler": "decal", "texture": "screen" } diff --git a/bgfx/effects/blurs/smart-blur.json b/bgfx/effects/blurs/smart-blur.json index abc52469dbd..f997dad6767 100644 --- a/bgfx/effects/blurs/smart-blur.json +++ b/bgfx/effects/blurs/smart-blur.json @@ -48,8 +48,9 @@ "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 ] } + { "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 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/crt-geom-deluxe.json b/bgfx/effects/crt-geom/crt-geom-deluxe.json index 08e4f2714c1..a33f124b4ef 100644 --- a/bgfx/effects/crt-geom/crt-geom-deluxe.json +++ b/bgfx/effects/crt-geom/crt-geom-deluxe.json @@ -20,33 +20,34 @@ "vertex": "chains/crt-geom/vs_crt-geom", "fragment": "chains/crt-geom/fs_crt-geom-deluxe", "uniforms": [ - { "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_quad_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_rotation_type", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "mpass_texture", "type": "int", "values": [ 0 ] }, - { "name": "mask_texture", "type": "int", "values": [ 1 ] }, - { "name": "blur_texture", "type": "int", "values": [ 2 ] }, - { "name": "mipmap_texture", "type": "int", "values": [ 3 ] }, - { "name": "curvature", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "CRTgamma", "type": "vec4", "values": [ 2.4, 0.0, 0.0, 0.0 ] }, - { "name": "monitorsRGB", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "monitorgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, - { "name": "overscan", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "aspect", "type": "vec4", "values": [ 1.0, 0.75,0.0, 0.0 ] }, - { "name": "d", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, - { "name": "R", "type": "vec4", "values": [ 3.5, 0.0, 0.0, 0.0 ] }, - { "name": "angle", "type": "vec4", "values": [ 0.0,-0.05,0.0, 0.0 ] }, - { "name": "cornersize", "type": "vec4", "values": [ 0.01,0.0, 0.0, 0.0 ] }, - { "name": "cornersmooth", "type": "vec4", "values": [ 1000.0,0.0,0.0,0.0 ] }, - { "name": "aperture_strength", "type": "vec4", "values": [ 0.25,0.0,0.0,0.0 ] }, - { "name": "aperture_brightboost","type": "vec4", "values": [ 0.25,0.0,0.0,0.0 ] }, - { "name": "spot_size", "type": "vec4", "values": [ 0.3,0.0,0.0,0.0 ] }, - { "name": "spot_growth", "type": "vec4", "values": [ 0.1,0.0,0.0,0.0 ] }, - { "name": "spot_growth_power", "type": "vec4", "values": [ 3.0,0.0,0.0,0.0 ] }, - { "name": "u_interp", "type": "vec4", "values": [ 2.0,0.0,0.0,0.0 ] }, - { "name": "halation", "type": "vec4", "values": [ 0.1,0.0,0.0,0.0 ] }, - { "name": "blurwidth", "type": "vec4", "values": [ 2.0,0.0,0.0,0.0 ] }, - { "name": "rasterbloom", "type": "vec4", "values": [ 0.01,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 ] }, + { "name": "u_quad_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_rotation_type", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "mpass_texture", "type": "int", "values": [ 0 ] }, + { "name": "mask_texture", "type": "int", "values": [ 1 ] }, + { "name": "blur_texture", "type": "int", "values": [ 2 ] }, + { "name": "mipmap_texture", "type": "int", "values": [ 3 ] }, + { "name": "curvature", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "CRTgamma", "type": "vec4", "values": [ 2.4, 0.0, 0.0, 0.0 ] }, + { "name": "monitorsRGB", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "monitorgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "overscan", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "aspect", "type": "vec4", "values": [ 1.0, 0.75, 0.0, 0.0 ] }, + { "name": "d", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "R", "type": "vec4", "values": [ 3.5, 0.0, 0.0, 0.0 ] }, + { "name": "angle", "type": "vec4", "values": [ 0.0, -0.05, 0.0, 0.0 ] }, + { "name": "cornersize", "type": "vec4", "values": [ 0.01, 0.0, 0.0, 0.0 ] }, + { "name": "cornersmooth", "type": "vec4", "values": [ 1000.0, 0.0, 0.0, 0.0 ] }, + { "name": "aperture_strength", "type": "vec4", "values": [ 0.25, 0.0, 0.0, 0.0 ] }, + { "name": "aperture_brightboost","type": "vec4", "values": [ 0.25, 0.0, 0.0, 0.0 ] }, + { "name": "spot_size", "type": "vec4", "values": [ 0.3, 0.0, 0.0, 0.0 ] }, + { "name": "spot_growth", "type": "vec4", "values": [ 0.1, 0.0, 0.0, 0.0 ] }, + { "name": "spot_growth_power", "type": "vec4", "values": [ 3.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_interp", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "halation", "type": "vec4", "values": [ 0.1, 0.0, 0.0, 0.0 ] }, + { "name": "blurwidth", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "rasterbloom", "type": "vec4", "values": [ 0.01, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/crt-geom.json b/bgfx/effects/crt-geom/crt-geom.json index e51f071495e..be3036a7620 100644 --- a/bgfx/effects/crt-geom/crt-geom.json +++ b/bgfx/effects/crt-geom/crt-geom.json @@ -20,28 +20,29 @@ "vertex": "chains/crt-geom/vs_crt-geom", "fragment": "chains/crt-geom/fs_crt-geom", "uniforms": [ - { "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_quad_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_rotation_type", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "mpass_texture", "type": "int", "values": [ 0 ] }, - { "name": "mask_texture", "type": "int", "values": [ 1 ] }, - { "name": "curvature", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "CRTgamma", "type": "vec4", "values": [ 2.4, 0.0, 0.0, 0.0 ] }, - { "name": "monitorsRGB", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "monitorgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, - { "name": "overscan", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "aspect", "type": "vec4", "values": [ 1.0, 0.75,0.0, 0.0 ] }, - { "name": "d", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, - { "name": "R", "type": "vec4", "values": [ 3.5, 0.0, 0.0, 0.0 ] }, - { "name": "angle", "type": "vec4", "values": [ 0.0,-0.05,0.0, 0.0 ] }, - { "name": "cornersize", "type": "vec4", "values": [ 0.01,0.0, 0.0, 0.0 ] }, - { "name": "cornersmooth", "type": "vec4", "values": [ 1000.0,0.0,0.0,0.0 ] }, - { "name": "aperture_strength", "type": "vec4", "values": [ 0.25,0.0,0.0,0.0 ] }, - { "name": "aperture_brightboost","type": "vec4", "values": [ 0.25,0.0,0.0,0.0 ] }, - { "name": "spot_size", "type": "vec4", "values": [ 0.3,0.0,0.0,0.0 ] }, - { "name": "spot_growth", "type": "vec4", "values": [ 0.1,0.0,0.0,0.0 ] }, - { "name": "spot_growth_power", "type": "vec4", "values": [ 3.0,0.0,0.0,0.0 ] }, - { "name": "u_interp", "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 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_quad_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_rotation_type", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "mpass_texture", "type": "int", "values": [ 0 ] }, + { "name": "mask_texture", "type": "int", "values": [ 1 ] }, + { "name": "curvature", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "CRTgamma", "type": "vec4", "values": [ 2.4, 0.0, 0.0, 0.0 ] }, + { "name": "monitorsRGB", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "monitorgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "overscan", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "aspect", "type": "vec4", "values": [ 1.0, 0.75, 0.0, 0.0 ] }, + { "name": "d", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "R", "type": "vec4", "values": [ 3.5, 0.0, 0.0, 0.0 ] }, + { "name": "angle", "type": "vec4", "values": [ 0.0, -0.05, 0.0, 0.0 ] }, + { "name": "cornersize", "type": "vec4", "values": [ 0.01, 0.0, 0.0, 0.0 ] }, + { "name": "cornersmooth", "type": "vec4", "values": [ 1000.0, 0.0, 0.0, 0.0 ] }, + { "name": "aperture_strength", "type": "vec4", "values": [ 0.25, 0.0, 0.0, 0.0 ] }, + { "name": "aperture_brightboost","type": "vec4", "values": [ 0.25, 0.0, 0.0, 0.0 ] }, + { "name": "spot_size", "type": "vec4", "values": [ 0.3, 0.0, 0.0, 0.0 ] }, + { "name": "spot_growth", "type": "vec4", "values": [ 0.1, 0.0, 0.0, 0.0 ] }, + { "name": "spot_growth_power", "type": "vec4", "values": [ 3.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_interp", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/gaussx.json b/bgfx/effects/crt-geom/gaussx.json index 896e514f0e5..1cf0a6e9dd0 100644 --- a/bgfx/effects/crt-geom/gaussx.json +++ b/bgfx/effects/crt-geom/gaussx.json @@ -20,10 +20,11 @@ "vertex": "chains/crt-geom/vs_gaussx", "fragment": "chains/crt-geom/fs_gaussx", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_width", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_aspect", "type": "vec4", "values": [ 1.0,0.75, 0.0, 0.0 ] }, - { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_width", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_aspect", "type": "vec4", "values": [ 1.0, 0.75, 0.0, 0.0 ] }, + { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/gaussy.json b/bgfx/effects/crt-geom/gaussy.json index e3e539a4ce2..c4bcc5ddb01 100644 --- a/bgfx/effects/crt-geom/gaussy.json +++ b/bgfx/effects/crt-geom/gaussy.json @@ -20,10 +20,11 @@ "vertex": "chains/crt-geom/vs_gaussy", "fragment": "chains/crt-geom/fs_gaussy", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_width", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_aspect", "type": "vec4", "values": [ 1.0,0.75, 0.0, 0.0 ] }, - { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_width", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_aspect", "type": "vec4", "values": [ 1.0, 0.75, 0.0, 0.0 ] }, + { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/lowpass.json b/bgfx/effects/crt-geom/lowpass.json index d5467d0a9a7..76aa381c85c 100644 --- a/bgfx/effects/crt-geom/lowpass.json +++ b/bgfx/effects/crt-geom/lowpass.json @@ -20,9 +20,10 @@ "vertex": "chains/crt-geom/vs_lowpass", "fragment": "chains/crt-geom/fs_lowpass", "uniforms": [ - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, { "name": "u_lowpass_cutoff","type": "vec4", "values": [ 200.0, 0.0, 0.0, 0.0 ] }, { "name": "u_lowpass_width", "type": "vec4", "values": [ 80.0, 0.0, 0.0, 0.0 ] }, - { "name": "s_screen", "type": "int", "values": [ 0 ] } + { "name": "s_screen", "type": "int", "values": [ 0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/mipmap8.json b/bgfx/effects/crt-geom/mipmap8.json index 78605feb939..f18bdd488bd 100644 --- a/bgfx/effects/crt-geom/mipmap8.json +++ b/bgfx/effects/crt-geom/mipmap8.json @@ -20,10 +20,11 @@ "vertex": "chains/crt-geom/vs_mipmap8", "fragment": "chains/crt-geom/fs_mipmap8", "uniforms": [ - { "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_smooth", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, - { "name": "s_screen", "type": "int", "values": [ 0 ] }, - { "name": "s_mipmap", "type": "int", "values": [ 1 ] } + { "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_smooth", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, + { "name": "s_screen", "type": "int", "values": [ 0 ] }, + { "name": "s_mipmap", "type": "int", "values": [ 1 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/phosphor_apply.json b/bgfx/effects/crt-geom/phosphor_apply.json index f1c322c5b6e..a6344901a8d 100644 --- a/bgfx/effects/crt-geom/phosphor_apply.json +++ b/bgfx/effects/crt-geom/phosphor_apply.json @@ -20,11 +20,12 @@ "vertex": "chains/crt-geom/vs_phosphor_apply", "fragment": "chains/crt-geom/fs_phosphor_apply", "uniforms": [ - { "name": "s_screen", "type": "int", "values": [ 0 ] }, - { "name": "s_phosphor", "type": "int", "values": [ 1 ] }, - { "name": "u_phosphor_power", "type": "vec4", "values": [ 1.3, 0.0, 0.0, 0.0 ] }, - { "name": "u_phosphor_amplitude","type": "vec4", "values": [ 0.2, 0.0, 0.0, 0.0 ] }, - { "name": "u_phosphor_cutoff", "type": "vec4", "values": [300.0,0.0, 0.0, 0.0 ] }, - { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] } + { "name": "s_screen", "type": "int", "values": [ 0 ] }, + { "name": "s_phosphor", "type": "int", "values": [ 1 ] }, + { "name": "u_phosphor_power", "type": "vec4", "values": [ 1.3, 0.0, 0.0, 0.0 ] }, + { "name": "u_phosphor_amplitude", "type": "vec4", "values": [ 0.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_phosphor_cutoff", "type": "vec4", "values": [ 300.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/crt-geom/phosphor_update.json b/bgfx/effects/crt-geom/phosphor_update.json index 77740af02ba..cb221443d3a 100644 --- a/bgfx/effects/crt-geom/phosphor_update.json +++ b/bgfx/effects/crt-geom/phosphor_update.json @@ -20,11 +20,12 @@ "vertex": "chains/crt-geom/vs_phosphor_update", "fragment": "chains/crt-geom/fs_phosphor_update", "uniforms": [ - { "name": "s_screen", "type": "int", "values": [ 0 ] }, - { "name": "s_phosphor", "type": "int", "values": [ 1 ] }, - { "name": "u_phosphor_power", "type": "vec4", "values": [ 1.3, 0.0, 0.0, 0.0 ] }, - { "name": "u_phosphor_amplitude","type": "vec4", "values": [ 0.2, 0.0, 0.0, 0.0 ] }, - { "name": "u_phosphor_cutoff", "type": "vec4", "values": [300.0,0.0, 0.0, 0.0 ] }, - { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] } + { "name": "s_screen", "type": "int", "values": [ 0 ] }, + { "name": "s_phosphor", "type": "int", "values": [ 1 ] }, + { "name": "u_phosphor_power", "type": "vec4", "values": [ 1.3, 0.0, 0.0, 0.0 ] }, + { "name": "u_phosphor_amplitude","type": "vec4", "values": [ 0.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_phosphor_cutoff", "type": "vec4", "values": [ 300.0 ,0.0, 0.0, 0.0 ] }, + { "name": "u_gamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/default/blit.json b/bgfx/effects/default/blit.json index 82b4594dd7a..00d57f3f0b0 100644 --- a/bgfx/effects/default/blit.json +++ b/bgfx/effects/default/blit.json @@ -58,6 +58,12 @@ // // 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_view_dims" + // The dimensions of the viewport. + // Valid values: xy + // "u_inv_view_dims" + // The reciprocal of u_view_dims. + // Valid values: xy // "u_screen_dims" // The dimensions of the first texture input if present, otherwise the dimensions of the output window. // Valid values: xy @@ -95,6 +101,7 @@ // "mat3": 9 floats // "mat4": 16 floats "values": [ 1.0 ] - } + }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/eagle/supereagle.json b/bgfx/effects/eagle/supereagle.json index ec919828d5c..3ae4387c15a 100644 --- a/bgfx/effects/eagle/supereagle.json +++ b/bgfx/effects/eagle/supereagle.json @@ -28,8 +28,9 @@ "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 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "LUT", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/gui_add.json b/bgfx/effects/gui_add.json index 8b5da4998a1..72174b79b58 100644 --- a/bgfx/effects/gui_add.json +++ b/bgfx/effects/gui_add.json @@ -25,6 +25,7 @@ "vertex": "vs_gui", "fragment": "fs_gui", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/gui_blend.json b/bgfx/effects/gui_blend.json index 9cf160ac6ba..e73a8dd2f95 100644 --- a/bgfx/effects/gui_blend.json +++ b/bgfx/effects/gui_blend.json @@ -25,6 +25,7 @@ "vertex": "vs_gui", "fragment": "fs_gui", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/gui_multiply.json b/bgfx/effects/gui_multiply.json index 15ac24c91a9..047b1f437eb 100644 --- a/bgfx/effects/gui_multiply.json +++ b/bgfx/effects/gui_multiply.json @@ -10,9 +10,7 @@ "blend": { "equation": "add", "srcColor": "dstcolor", - "dstColor": "0", - "srcAlpha": "dstalpha", - "dstAlpha": "0" + "dstColor": "1-srcalpha" }, "depth": { "function": "always" @@ -25,6 +23,7 @@ "vertex": "vs_gui", "fragment": "fs_gui", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/gui_opaque.json b/bgfx/effects/gui_opaque.json index 51f0941c89f..f7f298145c7 100644 --- a/bgfx/effects/gui_opaque.json +++ b/bgfx/effects/gui_opaque.json @@ -6,13 +6,6 @@ // //============================================================ { - "blend": { - "equation": "add", - "srcColor": "1", - "dstColor": "0", - "srcAlpha": "1", - "dstAlpha": "0" - }, "depth": { "function": "always" }, @@ -24,6 +17,7 @@ "vertex": "vs_gui", "fragment": "fs_gui", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/blit.json b/bgfx/effects/hlsl/blit.json index 1fdfd623638..7aa7f37f5e9 100644 --- a/bgfx/effects/hlsl/blit.json +++ b/bgfx/effects/hlsl/blit.json @@ -116,6 +116,7 @@ // "mat3": 9 floats // "mat4": 16 floats "values": [ 1.0 ] - } + }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/chroma.json b/bgfx/effects/hlsl/chroma.json index 96bae4475f8..64ddb4db311 100644 --- a/bgfx/effects/hlsl/chroma.json +++ b/bgfx/effects/hlsl/chroma.json @@ -24,10 +24,11 @@ "vertex": "chains/hlsl/vs_chroma", "fragment": "chains/hlsl/fs_chroma", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 0.0 ] }, - { "name": "u_y_gain", "type": "vec4", "values": [ 0.2124, 0.7011, 0.0866, 0.0 ] }, - { "name": "u_chroma_a", "type": "vec4", "values": [ 0.630, 0.340, 0.0, 0.0 ] }, - { "name": "u_chroma_b", "type": "vec4", "values": [ 0.310, 0.595, 0.0, 0.0 ] }, - { "name": "u_chroma_c", "type": "vec4", "values": [ 0.155, 0.070, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 0.0 ] }, + { "name": "u_y_gain", "type": "vec4", "values": [ 0.2124, 0.7011, 0.0866, 0.0 ] }, + { "name": "u_chroma_a", "type": "vec4", "values": [ 0.630, 0.340, 0.0, 0.0 ] }, + { "name": "u_chroma_b", "type": "vec4", "values": [ 0.310, 0.595, 0.0, 0.0 ] }, + { "name": "u_chroma_c", "type": "vec4", "values": [ 0.155, 0.070, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/color.json b/bgfx/effects/hlsl/color.json index 69743d6cab5..8916f5b2b3a 100644 --- a/bgfx/effects/hlsl/color.json +++ b/bgfx/effects/hlsl/color.json @@ -24,12 +24,13 @@ "vertex": "chains/hlsl/vs_color", "fragment": "chains/hlsl/fs_color", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_red_ratios", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_grn_ratios", "type": "vec4", "values": [ 0.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_blu_ratios", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 0.0 ] }, - { "name": "u_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scale", "type": "vec4", "values": [ 0.95, 0.95, 0.95, 0.0 ] }, - { "name": "u_saturation", "type": "vec4", "values": [ 1.5, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_red_ratios", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_grn_ratios", "type": "vec4", "values": [ 0.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_blu_ratios", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 0.0 ] }, + { "name": "u_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scale", "type": "vec4", "values": [ 0.95, 0.95, 0.95, 0.0 ] }, + { "name": "u_saturation", "type": "vec4", "values": [ 1.5, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/deconverge.json b/bgfx/effects/hlsl/deconverge.json index 053bc078c64..ca496f2c534 100644 --- a/bgfx/effects/hlsl/deconverge.json +++ b/bgfx/effects/hlsl/deconverge.json @@ -25,13 +25,14 @@ "vertex": "chains/hlsl/vs_deconverge", "fragment": "chains/hlsl/fs_deconverge", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, { "name": "u_source_size", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, - { "name": "u_converge_red", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, - { "name": "u_converge_green", "type": "vec4", "values": [ 0.0, 0.5, 0.0, 0.0 ] }, - { "name": "u_converge_blue", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_radial_converge_red", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_radial_converge_green", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_radial_converge_blue", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + { "name": "u_converge_red", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, + { "name": "u_converge_green", "type": "vec4", "values": [ 0.0, 0.5, 0.0, 0.0 ] }, + { "name": "u_converge_blue", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_radial_converge_red", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_radial_converge_green", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_radial_converge_blue", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/defocus.json b/bgfx/effects/hlsl/defocus.json index aa46ca0822b..556b8aeffe7 100644 --- a/bgfx/effects/hlsl/defocus.json +++ b/bgfx/effects/hlsl/defocus.json @@ -24,8 +24,9 @@ "vertex": "chains/hlsl/vs_defocus", "fragment": "chains/hlsl/fs_defocus", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_defocus", "type": "vec4", "values": [ 0.5, 0.5, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_defocus", "type": "vec4", "values": [ 0.5, 0.5, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/distortion.json b/bgfx/effects/hlsl/distortion.json index 4fc6fbc3dd5..d4127fb8066 100644 --- a/bgfx/effects/hlsl/distortion.json +++ b/bgfx/effects/hlsl/distortion.json @@ -38,6 +38,7 @@ { "name": "u_round_corner", "type": "vec4", "values": [ 0.20, 0.0, 0.0, 0.0 ] }, { "name": "u_smooth_border", "type": "vec4", "values": [ 0.05, 0.0, 0.0, 0.0 ] }, { "name": "u_vignetting", "type": "vec4", "values": [ 0.20, 0.0, 0.0, 0.0 ] }, - { "name": "u_reflection", "type": "vec4", "values": [ 0.30, 0.0, 0.0, 0.0 ] } + { "name": "u_reflection", "type": "vec4", "values": [ 0.30, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/ntsc_decode.json b/bgfx/effects/hlsl/ntsc_decode.json index 039a94de4b5..8c363bb1dff 100644 --- a/bgfx/effects/hlsl/ntsc_decode.json +++ b/bgfx/effects/hlsl/ntsc_decode.json @@ -31,13 +31,14 @@ { "name": "u_a_value", "type": "vec4", "values": [ 0.5, 0.5, 0.5, 0.5 ] }, { "name": "u_b_value", "type": "vec4", "values": [ 0.5, 0.5, 0.5, 0.5 ] }, { "name": "u_cc_value", "type": "vec4", "values": [ 3.5795454, 3.5795454, 3.5795454, 3.5795454 ] }, - { "name": "u_o_value", "type": "vec4", "values": [ 1.570796325, 1.570796325, 1.570796325, 1.570796325 ] }, + { "name": "u_o_value", "type": "vec4", "values": [ 1.570796325, 1.570796325, 1.570796325, 1.570796325 ] }, { "name": "u_scan_time", "type": "vec4", "values": [ 52.6, 0.0, 0.0, 0.0 ] }, { "name": "u_notch_width", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] }, { "name": "u_y_freq_response", "type": "vec4", "values": [ 6.0, 0.0, 0.0, 0.0 ] }, { "name": "u_i_freq_response", "type": "vec4", "values": [ 1.2, 0.0, 0.0, 0.0 ] }, { "name": "u_q_freq_response", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "u_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_jitter_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + { "name": "u_jitter_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/ntsc_encode.json b/bgfx/effects/hlsl/ntsc_encode.json index 71ef588ceaa..140eb2fb150 100644 --- a/bgfx/effects/hlsl/ntsc_encode.json +++ b/bgfx/effects/hlsl/ntsc_encode.json @@ -26,13 +26,14 @@ "fragment": "chains/hlsl/fs_ntsc_encode", "uniforms": [ { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_source_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_a_value", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, - { "name": "u_b_value", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, - { "name": "u_cc_value", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, - { "name": "u_p_value", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_source_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_a_value", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, + { "name": "u_b_value", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, + { "name": "u_cc_value", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, + { "name": "u_p_value", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "u_scan_time", "type": "vec4", "values": [ 52.6, 0.0, 0.0, 0.0 ] }, - { "name": "u_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_jitter_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + { "name": "u_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_jitter_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/phosphor.json b/bgfx/effects/hlsl/phosphor.json index 7209c98891d..48a03c42081 100644 --- a/bgfx/effects/hlsl/phosphor.json +++ b/bgfx/effects/hlsl/phosphor.json @@ -25,9 +25,10 @@ "vertex": "chains/hlsl/vs_phosphor", "fragment": "chains/hlsl/fs_phosphor", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "s_prev", "type": "int", "values": [ 1.0 ] }, - { "name": "u_passthrough", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_phosphor", "type": "vec4", "values": [ 0.7, 0.7, 0.7, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "s_prev", "type": "int", "values": [ 1.0 ] }, + { "name": "u_passthrough", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_phosphor", "type": "vec4", "values": [ 0.7, 0.7, 0.7, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/post.json b/bgfx/effects/hlsl/post.json index 41fbd4b2f40..d6c25b4c84e 100644 --- a/bgfx/effects/hlsl/post.json +++ b/bgfx/effects/hlsl/post.json @@ -27,23 +27,24 @@ "uniforms": [ { "name": "s_tex", "type": "int", "values": [ 0.0 ] }, { "name": "s_shadow", "type": "int", "values": [ 1.0 ] }, - { "name": "u_swap_xy", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_source_dims", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, - { "name": "u_target_dims", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, - { "name": "u_target_scale", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_humbar_hertz_rate", "type": "vec4", "values": [ 0.001, 0.0, 0.0, 0.0 ] }, - { "name": "u_humbar_alpha", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_time", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_screen_scale", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_screen_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_shadow_tile_mode", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_shadow_alpha", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_shadow_count", "type": "vec4", "values": [ 12.0, 12.0, 0.0, 0.0 ] }, - { "name": "u_shadow_uv", "type": "vec4", "values": [ 0.25, 0.25, 0.0, 0.0 ] }, - { "name": "u_shadow_uv_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_power", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 0.0 ] }, - { "name": "u_floor", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_chroma_mode", "type": "vec4", "values": [ 3.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_conversion_gain", "type": "vec4", "values": [ 0.299, 0.587, 0.114, 0.0 ] } + { "name": "u_swap_xy", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_source_dims", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, + { "name": "u_target_dims", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, + { "name": "u_target_scale", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_humbar_hertz_rate", "type": "vec4", "values": [ 0.001, 0.0, 0.0, 0.0 ] }, + { "name": "u_humbar_alpha", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_time", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_screen_scale", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_screen_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_shadow_tile_mode", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_shadow_alpha", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_shadow_count", "type": "vec4", "values": [ 12.0, 12.0, 0.0, 0.0 ] }, + { "name": "u_shadow_uv", "type": "vec4", "values": [ 0.25, 0.25, 0.0, 0.0 ] }, + { "name": "u_shadow_uv_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_power", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 0.0 ] }, + { "name": "u_floor", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_chroma_mode", "type": "vec4", "values": [ 3.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_conversion_gain", "type": "vec4", "values": [ 0.299, 0.587, 0.114, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/prescale.json b/bgfx/effects/hlsl/prescale.json index cbe684321cf..df0aec423e3 100644 --- a/bgfx/effects/hlsl/prescale.json +++ b/bgfx/effects/hlsl/prescale.json @@ -25,8 +25,9 @@ "vertex": "chains/hlsl/vs_prescale", "fragment": "chains/hlsl/fs_prescale", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_source_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_source_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hlsl/scanline.json b/bgfx/effects/hlsl/scanline.json index 07ff15546f3..60d21ad74a8 100644 --- a/bgfx/effects/hlsl/scanline.json +++ b/bgfx/effects/hlsl/scanline.json @@ -25,20 +25,21 @@ "fragment": "chains/hlsl/fs_scanline", "uniforms": [ { "name": "s_tex", "type": "int", "values": [ 0.0 ] }, - { "name": "u_swap_xy", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_swap_xy", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, { "name": "u_source_dims", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, { "name": "u_target_dims", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, { "name": "u_quad_dims", "type": "vec4", "values": [ 256.0, 256.0, 0.0, 0.0 ] }, - { "name": "u_time", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_screen_scale", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_screen_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scanline_alpha", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scanline_scale", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scanline_bright_scale", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scanline_bright_offset", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scanline_jitter", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scanline_height", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_scanline_variation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + { "name": "u_time", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_screen_scale", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_screen_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_alpha", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_scale", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_bright_scale", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_bright_offset", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_jitter", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_height", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_variation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hqx/hq2x.json b/bgfx/effects/hqx/hq2x.json index 315603820ff..4938a4487a6 100644 --- a/bgfx/effects/hqx/hq2x.json +++ b/bgfx/effects/hqx/hq2x.json @@ -22,8 +22,9 @@ "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 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "LUT", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hqx/hq3x.json b/bgfx/effects/hqx/hq3x.json index 5a578eb931f..fe282d61b53 100644 --- a/bgfx/effects/hqx/hq3x.json +++ b/bgfx/effects/hqx/hq3x.json @@ -22,8 +22,9 @@ "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 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "LUT", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/hqx/hq4x.json b/bgfx/effects/hqx/hq4x.json index 6fe7803dc3f..2511cc46d36 100644 --- a/bgfx/effects/hqx/hq4x.json +++ b/bgfx/effects/hqx/hq4x.json @@ -22,8 +22,9 @@ "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 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "LUT", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/lcd-grid/lcd-grid.json b/bgfx/effects/lcd-grid/lcd-grid.json index 5b465d5cf7b..b848cdca708 100644 --- a/bgfx/effects/lcd-grid/lcd-grid.json +++ b/bgfx/effects/lcd-grid/lcd-grid.json @@ -20,18 +20,19 @@ "vertex": "chains/lcd-grid/vs_lcd-grid", "fragment": "chains/lcd-grid/fs_lcd-grid", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_quad_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_rsubpix", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_gsubpix", "type": "vec4", "values": [ 0.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_bsubpix", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 0.0 ] }, - { "name": "u_gain", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_blacklevel","type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_ambient", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_BGR", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_subpixsize","type": "vec4", "values": [ 0.5, 0.63, 0.0, 0.0 ] }, - { "name": "u_LCDgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, - { "name": "u_monitorgamma","type":"vec4","values": [ 2.2, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_quad_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_rsubpix", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_gsubpix", "type": "vec4", "values": [ 0.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_bsubpix", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 0.0 ] }, + { "name": "u_gain", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_blacklevel", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_ambient", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_BGR", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_subpixsize", "type": "vec4", "values": [ 0.5, 0.63, 0.0, 0.0 ] }, + { "name": "u_LCDgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_monitorgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/lcd-grid/persistence.json b/bgfx/effects/lcd-grid/persistence.json index 1f4e57c7587..f9ab0d6ae87 100644 --- a/bgfx/effects/lcd-grid/persistence.json +++ b/bgfx/effects/lcd-grid/persistence.json @@ -20,8 +20,9 @@ "vertex": "chains/lcd-grid/vs_persistence", "fragment": "chains/lcd-grid/fs_persistence", "uniforms": [ - { "name": "s_screen", "type": "int", "values": [ 0 ] }, - { "name": "s_motionblur", "type": "int", "values": [ 1 ] }, - { "name": "u_persistence","type":"vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + { "name": "s_screen", "type": "int", "values": [ 0 ] }, + { "name": "s_motionblur", "type": "int", "values": [ 1 ] }, + { "name": "u_persistence", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/bcg_adjust.json b/bgfx/effects/misc/bcg_adjust.json index 35c9595e309..01a09559e0a 100644 --- a/bgfx/effects/misc/bcg_adjust.json +++ b/bgfx/effects/misc/bcg_adjust.json @@ -8,10 +8,10 @@ { "blend": { "equation": "add", - "srcColor": "srcalpha", - "dstColor": "1-srcalpha", - "srcAlpha": "srcalpha", - "dstAlpha": "1-srcalpha" + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" }, "depth": { "function": "always", "writeenable": false }, "cull": { "mode": "none" }, @@ -19,8 +19,9 @@ "vertex": "chains/misc/vs_blit", "fragment": "chains/misc/fs_blit_bcg", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, - { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/blit.json b/bgfx/effects/misc/blit.json index a5e5c544336..c8ef20a4a91 100644 --- a/bgfx/effects/misc/blit.json +++ b/bgfx/effects/misc/blit.json @@ -21,10 +21,10 @@ // 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" + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" }, // depth (required): The depth state for this effect. @@ -116,6 +116,7 @@ // "mat3": 9 floats // "mat4": 16 floats "values": [ 1.0 ] - } + }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/blit_palette16.json b/bgfx/effects/misc/blit_palette16.json index e0eb7f09140..39cd1d235a2 100644 --- a/bgfx/effects/misc/blit_palette16.json +++ b/bgfx/effects/misc/blit_palette16.json @@ -21,10 +21,10 @@ // 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" + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" }, // depth (required): The depth state for this effect. @@ -117,9 +117,10 @@ // "mat4": 16 floats "values": [ 1.0 ] }, - { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, { "name": "u_inv_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/deposterize-pass0.json b/bgfx/effects/misc/deposterize-pass0.json index c5e8efe9fc2..5c83a02f406 100644 --- a/bgfx/effects/misc/deposterize-pass0.json +++ b/bgfx/effects/misc/deposterize-pass0.json @@ -29,9 +29,10 @@ "vertex": "chains/misc/vs_deposterize-pass0", "fragment": "chains/misc/fs_deposterize-pass0", "uniforms": [ - { "name": "decal", "type": "int", "values": [ 1.0 ] }, - { "name": "EQ_THRESH1", "type": "vec4", "values": [ 0.01, 0.0, 0.0, 0.0 ] }, - { "name": "DIFF_THRESH1", "type": "vec4", "values": [ 0.06, 0.0, 0.0, 0.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "EQ_THRESH1", "type": "vec4", "values": [ 0.01, 0.0, 0.0, 0.0 ] }, + { "name": "DIFF_THRESH1", "type": "vec4", "values": [ 0.06, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/deposterize-pass1.json b/bgfx/effects/misc/deposterize-pass1.json index 3b7be7e9e12..f3ab46309af 100644 --- a/bgfx/effects/misc/deposterize-pass1.json +++ b/bgfx/effects/misc/deposterize-pass1.json @@ -29,9 +29,10 @@ "vertex": "chains/misc/vs_deposterize-pass1", "fragment": "chains/misc/fs_deposterize-pass1", "uniforms": [ - { "name": "decal", "type": "int", "values": [ 1.0 ] }, - { "name": "EQ_THRESH2", "type": "vec4", "values": [ 0.01, 0.0, 0.0, 0.0 ] }, - { "name": "DIFF_THRESH2", "type": "vec4", "values": [ 0.06, 0.0, 0.0, 0.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "EQ_THRESH2", "type": "vec4", "values": [ 0.01, 0.0, 0.0, 0.0 ] }, + { "name": "DIFF_THRESH2", "type": "vec4", "values": [ 0.06, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/lut.json b/bgfx/effects/misc/lut.json index a1c3c0d0d22..306774e4754 100644 --- a/bgfx/effects/misc/lut.json +++ b/bgfx/effects/misc/lut.json @@ -19,9 +19,10 @@ "vertex": "chains/misc/vs_lut", "fragment": "chains/misc/fs_lut", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "s_3dlut", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "s_3dlut", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/saturation.json b/bgfx/effects/misc/saturation.json index bdd8fe1e6e2..1ad27c0f728 100644 --- a/bgfx/effects/misc/saturation.json +++ b/bgfx/effects/misc/saturation.json @@ -24,7 +24,8 @@ "vertex": "chains/misc/vs_saturation", "fragment": "chains/misc/fs_saturation", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/misc/texconv_argb32.json b/bgfx/effects/misc/texconv_argb32.json new file mode 100644 index 00000000000..771bd9de312 --- /dev/null +++ b/bgfx/effects/misc/texconv_argb32.json @@ -0,0 +1,27 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +//=============================================================== +// +// texconv_argb32.json: An basic texture-to-target copy. +// +//=============================================================== +{ + "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/misc/vs_resize_blit", + "fragment": "chains/misc/fs_blit", + "uniforms": [ + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_bounds0", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 1.0 ] } + ] +} diff --git a/bgfx/effects/misc/texconv_palette16.json b/bgfx/effects/misc/texconv_palette16.json index a9cee2d3f16..d2efb3adc4e 100644 --- a/bgfx/effects/misc/texconv_palette16.json +++ b/bgfx/effects/misc/texconv_palette16.json @@ -8,21 +8,23 @@ { "blend": { "equation": "add", - "srcColor": "srcalpha", - "dstColor": "1-srcalpha", - "srcAlpha": "srcalpha", - "dstAlpha": "1-srcalpha" + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" }, "depth": { "function": "always", "writeenable": false }, "cull": { "mode": "none" }, "write": { "rgb": true, "alpha": true }, - "vertex": "chains/misc/vs_blit", + "vertex": "chains/misc/vs_resize_blit", "fragment": "chains/misc/fs_blit_palette16", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, { "name": "u_inv_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_bounds0", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 1.0 ] } ] } diff --git a/bgfx/effects/misc/texconv_rgb32.json b/bgfx/effects/misc/texconv_rgb32.json index 076175d7782..ffc5d3e809d 100644 --- a/bgfx/effects/misc/texconv_rgb32.json +++ b/bgfx/effects/misc/texconv_rgb32.json @@ -8,18 +8,20 @@ { "blend": { "equation": "add", - "srcColor": "srcalpha", - "dstColor": "1-srcalpha", - "srcAlpha": "srcalpha", - "dstAlpha": "1-srcalpha" + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" }, "depth": { "function": "always", "writeenable": false }, "cull": { "mode": "none" }, "write": { "rgb": true, "alpha": true }, - "vertex": "chains/misc/vs_blit", + "vertex": "chains/misc/vs_resize_blit", "fragment": "chains/misc/fs_blit_rgb32", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "s_pal", "type": "int", "values": [ 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "s_pal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_bounds0", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 1.0 ] } ] } diff --git a/bgfx/effects/misc/texconv_yuy16.json b/bgfx/effects/misc/texconv_yuy16.json index b46f996c9c2..cfa412bd2d6 100644 --- a/bgfx/effects/misc/texconv_yuy16.json +++ b/bgfx/effects/misc/texconv_yuy16.json @@ -9,19 +9,21 @@ { "blend": { "equation": "add", - "srcColor": "srcalpha", - "dstColor": "1-srcalpha", - "srcAlpha": "srcalpha", - "dstAlpha": "1-srcalpha" + "srcColor": "1", + "dstColor": "0", + "srcAlpha": "1", + "dstAlpha": "0" }, "depth": { "function": "always", "writeenable": false }, "cull": { "mode": "none" }, "write": { "rgb": true, "alpha": true }, - "vertex": "chains/misc/vs_blit", + "vertex": "chains/misc/vs_resize_blit", "fragment": "chains/misc/fs_blit_yuy16", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_inv_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_tex_bounds0", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 1.0 ] } ] } diff --git a/bgfx/effects/pillarbox_left_horizontal/gaussian.json b/bgfx/effects/pillarbox_left_horizontal/gaussian.json index b7c2a228c53..a5ac6ae3ad6 100644 --- a/bgfx/effects/pillarbox_left_horizontal/gaussian.json +++ b/bgfx/effects/pillarbox_left_horizontal/gaussian.json @@ -24,9 +24,10 @@ "vertex": "chains/pillarbox_left_horizontal/vs_gaussian", "fragment": "chains/pillarbox_left_horizontal/fs_gaussian", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/pillarbox_left_horizontal/offset_sat.json b/bgfx/effects/pillarbox_left_horizontal/offset_sat.json index 2244741f8cc..796a3ac8fda 100644 --- a/bgfx/effects/pillarbox_left_horizontal/offset_sat.json +++ b/bgfx/effects/pillarbox_left_horizontal/offset_sat.json @@ -28,7 +28,8 @@ "vertex": "chains/pillarbox_left_horizontal/vs_offset_sat", "fragment": "chains/pillarbox_left_horizontal/fs_offset_sat", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/pillarbox_left_vertical/gaussian.json b/bgfx/effects/pillarbox_left_vertical/gaussian.json index 497a8421e29..ddb6777bf67 100644 --- a/bgfx/effects/pillarbox_left_vertical/gaussian.json +++ b/bgfx/effects/pillarbox_left_vertical/gaussian.json @@ -24,9 +24,10 @@ "vertex": "chains/pillarbox_left_vertical/vs_gaussian", "fragment": "chains/pillarbox_left_vertical/fs_gaussian", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/pillarbox_left_vertical/offset_sat.json b/bgfx/effects/pillarbox_left_vertical/offset_sat.json index 19c6a141db7..bf2f3eae78c 100644 --- a/bgfx/effects/pillarbox_left_vertical/offset_sat.json +++ b/bgfx/effects/pillarbox_left_vertical/offset_sat.json @@ -28,7 +28,8 @@ "vertex": "chains/pillarbox_left_vertical/vs_offset_sat", "fragment": "chains/pillarbox_left_vertical/fs_offset_sat", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/pillarbox_right_horizontal/gaussian.json b/bgfx/effects/pillarbox_right_horizontal/gaussian.json index 855d79cbdb5..ba585fefd52 100644 --- a/bgfx/effects/pillarbox_right_horizontal/gaussian.json +++ b/bgfx/effects/pillarbox_right_horizontal/gaussian.json @@ -24,9 +24,10 @@ "vertex": "chains/pillarbox_right_horizontal/vs_gaussian", "fragment": "chains/pillarbox_right_horizontal/fs_gaussian", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/pillarbox_right_horizontal/offset_sat.json b/bgfx/effects/pillarbox_right_horizontal/offset_sat.json index 75165c63625..4636309212f 100644 --- a/bgfx/effects/pillarbox_right_horizontal/offset_sat.json +++ b/bgfx/effects/pillarbox_right_horizontal/offset_sat.json @@ -28,7 +28,8 @@ "vertex": "chains/pillarbox_right_horizontal/vs_offset_sat", "fragment": "chains/pillarbox_right_horizontal/fs_offset_sat", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/pillarbox_right_vertical/gaussian.json b/bgfx/effects/pillarbox_right_vertical/gaussian.json index a07622b34eb..61a04b86b70 100644 --- a/bgfx/effects/pillarbox_right_vertical/gaussian.json +++ b/bgfx/effects/pillarbox_right_vertical/gaussian.json @@ -24,9 +24,10 @@ "vertex": "chains/pillarbox_right_vertical/vs_gaussian", "fragment": "chains/pillarbox_right_vertical/fs_gaussian", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_dimension", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_radius", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/pillarbox_right_vertical/offset_sat.json b/bgfx/effects/pillarbox_right_vertical/offset_sat.json index 516c1b6be98..58707d34a34 100644 --- a/bgfx/effects/pillarbox_right_vertical/offset_sat.json +++ b/bgfx/effects/pillarbox_right_vertical/offset_sat.json @@ -28,7 +28,8 @@ "vertex": "chains/pillarbox_right_vertical/vs_offset_sat", "fragment": "chains/pillarbox_right_vertical/fs_offset_sat", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/screen_add.json b/bgfx/effects/screen_add.json index e1603f53507..8f99bda7188 100644 --- a/bgfx/effects/screen_add.json +++ b/bgfx/effects/screen_add.json @@ -26,7 +26,8 @@ "vertex": "vs_screen", "fragment": "fs_screen", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tint", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tint", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/screen_blend.json b/bgfx/effects/screen_blend.json index 0b2226d3396..64d64102b87 100644 --- a/bgfx/effects/screen_blend.json +++ b/bgfx/effects/screen_blend.json @@ -26,7 +26,8 @@ "vertex": "vs_screen", "fragment": "fs_screen", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tint", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tint", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/screen_multiply.json b/bgfx/effects/screen_multiply.json index 93bfb90c358..ba3192f550c 100644 --- a/bgfx/effects/screen_multiply.json +++ b/bgfx/effects/screen_multiply.json @@ -11,8 +11,8 @@ "blend": { "equation": "add", "srcColor": "dstcolor", - "dstColor": "0", - "srcAlpha": "dstalpha", + "dstColor": "1-srcalpha", + "srcAlpha": "1", "dstAlpha": "0" }, "depth": { @@ -26,7 +26,8 @@ "vertex": "vs_screen", "fragment": "fs_screen", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_tint", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tint", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/screen_opaque.json b/bgfx/effects/screen_opaque.json index 928ffdc5462..b94c06d39d9 100644 --- a/bgfx/effects/screen_opaque.json +++ b/bgfx/effects/screen_opaque.json @@ -8,13 +8,6 @@ // //============================================================ { - "blend": { - "equation": "add", - "srcColor": "1", - "dstColor": "0", - "srcAlpha": "1", - "dstAlpha": "0" - }, "depth": { "function": "always" }, @@ -26,6 +19,7 @@ "vertex": "vs_screen", "fragment": "fs_screen", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 1.0 ] } + { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/unfiltered/blit.json b/bgfx/effects/unfiltered/blit.json index 96760fff22c..1ad05a90bb1 100644 --- a/bgfx/effects/unfiltered/blit.json +++ b/bgfx/effects/unfiltered/blit.json @@ -116,6 +116,7 @@ // "mat3": 9 floats // "mat4": 16 floats "values": [ 1.0 ] - } + }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/warp/dilation-horizontal-fast.json b/bgfx/effects/warp/dilation-horizontal-fast.json index 6db07750ea5..63161dc51cd 100644 --- a/bgfx/effects/warp/dilation-horizontal-fast.json +++ b/bgfx/effects/warp/dilation-horizontal-fast.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/custom-jinc2-sharper.json b/bgfx/effects/xbr/super-xbr/custom-jinc2-sharper.json index 124f750f5b8..d9c407a100e 100644 --- a/bgfx/effects/xbr/super-xbr/custom-jinc2-sharper.json +++ b/bgfx/effects/xbr/super-xbr/custom-jinc2-sharper.json @@ -32,7 +32,8 @@ { "name": "s_p", "type": "int", "values": [ 1.0 ] }, { "name": "JINC2_WINDOW_SINC", "type": "vec4", "values": [ 0.42, 0.0, 0.0, 0.0 ] }, { "name": "JINC2_SINC", "type": "vec4", "values": [ 0.92, 0.0, 0.0, 0.0 ] }, - { "name": "JINC2_AR_STRENGTH", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + { "name": "JINC2_AR_STRENGTH", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass0.json b/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass0.json index 5985117f040..5fafed7db61 100644 --- a/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass0.json +++ b/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass0.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass1.json b/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass1.json index aa79d7c4bff..71a7cf79f0f 100644 --- a/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass1.json +++ b/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass1.json @@ -54,6 +54,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass2.json b/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass2.json index 971c566700a..14167a60182 100644 --- a/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass2.json +++ b/bgfx/effects/xbr/super-xbr/super-2xbr-3d-pass2.json @@ -54,6 +54,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass0.json b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass0.json index 7dc86e9bc72..3ed3e8f3271 100644 --- a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass0.json +++ b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass0.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass1.json b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass1.json index 5ddeecd317c..be3298b885f 100644 --- a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass1.json +++ b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass1.json @@ -54,6 +54,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass2.json b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass2.json index 366d1439deb..20150120e74 100644 --- a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass2.json +++ b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass2.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass3.json b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass3.json index 34b228a09b5..9a32be411c1 100644 --- a/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass3.json +++ b/bgfx/effects/xbr/super-xbr/super-4xbr-3d-pass3.json @@ -54,6 +54,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass0.json b/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass0.json index a19662e5d88..62a4f8b9f56 100644 --- a/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass0.json +++ b/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass0.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass1.json b/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass1.json index 4ee5ee1883e..4aac522e6a3 100644 --- a/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass1.json +++ b/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass1.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass2.json b/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass2.json index 66a6bfd119c..9fa30957734 100644 --- a/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass2.json +++ b/bgfx/effects/xbr/super-xbr/super-xbr-fast-pass2.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-xbr-pass0.json b/bgfx/effects/xbr/super-xbr/super-xbr-pass0.json index 4ac9b63240f..2d241982aa5 100644 --- a/bgfx/effects/xbr/super-xbr/super-xbr-pass0.json +++ b/bgfx/effects/xbr/super-xbr/super-xbr-pass0.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-xbr-pass1.json b/bgfx/effects/xbr/super-xbr/super-xbr-pass1.json index 8fca027bee5..f5f295d1971 100644 --- a/bgfx/effects/xbr/super-xbr/super-xbr-pass1.json +++ b/bgfx/effects/xbr/super-xbr/super-xbr-pass1.json @@ -54,6 +54,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/super-xbr/super-xbr-pass2.json b/bgfx/effects/xbr/super-xbr/super-xbr-pass2.json index 6b4be14029d..eaada276eed 100644 --- a/bgfx/effects/xbr/super-xbr/super-xbr-pass2.json +++ b/bgfx/effects/xbr/super-xbr/super-xbr-pass2.json @@ -53,6 +53,7 @@ { "name": "XBR_EDGE_STR", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] }, { "name": "XBR_WEIGHT", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "XBR_ANTI_RINGING", "type": "vec4", "values": [ 1.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_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json index 946fcc690b8..96d328a6c56 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-sharp.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json index 2983832c94e..e3ba992ceae 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2-gamma.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json index 8de360f9eb8..b71953038ee 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v2.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json index 2baacce4369..64a94019247 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4-gamma.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json index a04487306f0..f42fc494446 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json index 31d86e690b8..f325524492c 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v4b.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json index e4dac4b9782..a20b247d92b 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid-v5-gamma.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json index 1f810bf23cb..2b16dbe230f 100644 --- a/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json +++ b/bgfx/effects/xbr/xbr-hybrid/2xbr-hybrid.json @@ -29,7 +29,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv1-noblend.json b/bgfx/effects/xbr/xbr-lv1-noblend.json index 890e934e3b2..4ada03e4bc2 100644 --- a/bgfx/effects/xbr/xbr-lv1-noblend.json +++ b/bgfx/effects/xbr/xbr-lv1-noblend.json @@ -51,6 +51,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv2-3d.json b/bgfx/effects/xbr/xbr-lv2-3d.json index 2d3e28d0d5b..f1ec4256659 100644 --- a/bgfx/effects/xbr/xbr-lv2-3d.json +++ b/bgfx/effects/xbr/xbr-lv2-3d.json @@ -55,6 +55,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv2-fast.json b/bgfx/effects/xbr/xbr-lv2-fast.json index 1b1b4b593ad..6fcd1dcc975 100644 --- a/bgfx/effects/xbr/xbr-lv2-fast.json +++ b/bgfx/effects/xbr/xbr-lv2-fast.json @@ -53,6 +53,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } 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 index b2f4668b45f..0024671680e 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-a-pass0.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-a-pass0.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } 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 index f900518f72d..a0c163fc46b 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0.json @@ -51,6 +51,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } 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 index 32fc96476d9..ff5ef543275 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass1.json @@ -48,10 +48,11 @@ "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 ] } + { "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 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } 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 index 7a6a60045e2..299d53a62e2 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-b-pass0.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-b-pass0.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } 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 index c9e93b92e07..1b06bf9e19c 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-c-pass0.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-c-pass0.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } 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 index 9979b3d11b6..993c6469e02 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-d-pass0.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-d-pass0.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } 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 index edf4ead94ed..4ff249ec181 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-noblend-pass1.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-noblend-pass1.json @@ -48,9 +48,10 @@ "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 ] } + { "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_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json index 0b6938a4e77..bd5d94f7da1 100644 --- a/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json +++ b/bgfx/effects/xbr/xbr-lv2-multipass/xbr-lv2-pass1.json @@ -48,10 +48,11 @@ "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 ] } + { "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 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv2-noblend.json b/bgfx/effects/xbr/xbr-lv2-noblend.json index 8ea58baffe2..1a3a906309f 100644 --- a/bgfx/effects/xbr/xbr-lv2-noblend.json +++ b/bgfx/effects/xbr/xbr-lv2-noblend.json @@ -51,6 +51,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv2.json b/bgfx/effects/xbr/xbr-lv2.json index c974920b334..1cb0db3d8aa 100644 --- a/bgfx/effects/xbr/xbr-lv2.json +++ b/bgfx/effects/xbr/xbr-lv2.json @@ -53,6 +53,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json index ad9d884cc16..3cdcc58fd2a 100644 --- a/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json +++ b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass0.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json index a7bafa1205f..8184b6a84cc 100644 --- a/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json +++ b/bgfx/effects/xbr/xbr-lv3-multipass/xbr-lv3-pass1.json @@ -48,10 +48,11 @@ "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 ] } + { "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 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv3-noblend.json b/bgfx/effects/xbr/xbr-lv3-noblend.json index 319a8db5a90..3ba6f6359e8 100644 --- a/bgfx/effects/xbr/xbr-lv3-noblend.json +++ b/bgfx/effects/xbr/xbr-lv3-noblend.json @@ -53,6 +53,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-lv3.json b/bgfx/effects/xbr/xbr-lv3.json index 60498cba169..8a25ea0fbeb 100644 --- a/bgfx/effects/xbr/xbr-lv3.json +++ b/bgfx/effects/xbr/xbr-lv3.json @@ -57,6 +57,7 @@ { "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 ] } + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json index 20d2d41840d..746b53c44d9 100644 --- a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass1.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json index c57fb7ba331..bdaf8462948 100644 --- a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass2.json @@ -48,7 +48,8 @@ "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 ] } + { "name": "decal", "type": "int", "values": [ 1.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json index ba9b179d39a..da8b4716cb4 100644 --- a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass3.json @@ -48,8 +48,9 @@ "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 ] } + { "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 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json index 0547b5eef8b..675e02496e1 100644 --- a/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json +++ b/bgfx/effects/xbr/xbr-mlv4-multipass/xbr-mlv4-pass4.json @@ -48,9 +48,10 @@ "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 ] } + { "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 ] }, + { "name": "u_inv_view_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } ] } diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom.bin index 1e10cfa39109f1ea7bb0ecccfb7dcbadade9a94d..a04f43c158f6f289fdccddf3bb1cce820bf53ede 100644 GIT binary patch delta 3428 zcmbtXO=w(I6u$2z^Y;=n)1jG}WHM%wRHwofdv|uF>C_F}hI9($VpVzAqgrKjvI!QH}ZeeOI98=SG7x zZB>@ez-5{(?7B?W&{W=9s^A7#W@RMdEjpJ24^Tl<$U8Fh^4Kx@u=Edy_3T8Gy5)l> z)mFcsep|rud9>>fwt=MxoHSIe(r2{_y-}(#{trrbQm~t$jj0B_JS8jEuwF8}Uaa>b z2JPQ`ua`%iOI`NaI8Ga5lkDNn#QA`&*P1zKAl3{`j#uwfKMCdbfim5yRYoCm(z(r_ zxFAoS8FdM^t;*!%t85n)T+0;PAkW+fGHaHF=4Het%ha5UJ_e2Q!{hW-DVMCEJxte2 z2lM=vG{Ddzi-ojRZw4X#S#IReAS*)4PgG~ch^YBC8f0l+?}fTCHPZ&n;~q-nXN8FX zky^+oOv|&40$D9C!h^hqsf}`vgtZ0QU)%u_#KmMIxbEp>lr*+(H-Iqf3Q>`8&Ofixm{P{jc{b*LebY!Wp>NU1B!*KB~M zvYHJ`v)RC|z)r&Gt3<)QLy7=v!yp zC08nlL5$x{i|tB4kmdYzF3H^9Qw(M%G(Stkc-M$6KaBT}*ve_dpxNT2A7O$Jz21T+NdZk`N%-ii_W$WCxHRo6wNe+#!yLxW zecA0U+lTkkFo*Ks&MAT7-b+xLfHn^&+ZE>eBgfWbw|fp!)|4tjXFpi>bg`+h@L3nd zXiI#yj1bZ)>N%l`9+Vtw%EKJS`{qJUX|48Nx%KWcnBK6ohcyhIzfy$fc;HsWP(8g> zmFBM%Ujr)4y&VL!IX9ESjtc4O+{^)##ePAA^iH$d&M`HJVW!ikIXGFY zVTWgx1$o-jm?yH94}fY*z4ERW8)}Pfgt=*Yw>cA>pf8%O6X#d}X-Bk@5x&Z?hOt{- z8Rr~$>0FW#%#h*oMVB3|AE{70pMDk5qTGr>eJU1aXYg5Rv*KgB20evxg+C494&MNf zWhfDN80esozL}p1uVm==`GvL$Kg`L2V<;p>U5gV69XG@e^CQFqzQz&8yx=jh@br>C z%-@k)P|k>y$o`UvCPpscQp79ru&%J literal 12026 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 diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_gaussy.bin index 118e6f0f38d9f48f114749997e9d9706da9d4eed..8256d175e92d96545d232ab564b9080cd4a83614 100644 GIT binary patch literal 4142 zcmd^C&r4KM6h8BGW^6PahLm#C(5?s)gNhdUOlQ=MBhHLWZOlOW0Ydl#qD4H~3ehGP z;X+zOAngiTPW}b{39ce&=c0Arci%mF=Q=Y<5J(=l@4k1=x%Zs&opaB7uUMY!9{BiX zOF*5HUYmcku(Y(0!&8DR>0X;(U3@;j^5n(hP)@Rzn_MAx2r99b|Ge8LGG4no_V!D4 zcm4XijZd3DZ*ERpo})Hp9hk3Te8%{JF;$+Jjxcv(bYVQkAW@&XBrKCvj3ggGnbD{pbBK__Vu-_51mF4X_Cq>kYU#i;R$h5EqZ&QnzL-2q}z4+%XvC$uzOv63Ogi zFWOCEX8b{ji^w;TdR=4>W2+9E$@kV~sw>uqPMT{;#a=s~i~TN$tna|+ShZiM!&ts& ztj^1LR$P2tv!Cwk>0W~$zD?!P2L0d+e^WW^!Me)Wc)2g*cxCyCkep})7??QR^{JkC z?FDPkl{M4sTY?)=?#{C=5NmK_5BjjxAi|54Hz&W8l=-By5LiwcS$M}RCbJiU5Uh~45 zSKr5;GS)ZyjGhl)huHBvxjLF3;u(av9HsQI*0s%3(e}`S*NaTvRo6QMT9ZcSFYCHl zJgiACo)r5Kl#R1Cu2bIg-MVac2K}A_ogUT_&-y?j z#xNkV@%Iw$_}#P>7Edv*$LZCqVeOYhuRX4Hi|gJ2uGDAmX8!by2GEM}mr>r4TJ=Gb zce}n-&(Yf8tnV&Ca|>k^m$^&3jRd0V~5iJ|)~i$_vAXLB`Z z-z6D4yE42JO+8#`BfH&3#yyFBvps3Im5laU$!L!<_7;sn{j~3!FrK3k{DWmwCkU~~ z`v=o?T8q?B9JTN3w}>m_zumIMCI~5M{I^R*c`^;@zYg=Del@d4yVNnYpKtu1yJJ2} G^70!7XlDrk literal 4166 zcmeHKziU)M5T1L<{qUm65lqlD9+n~)Qi!B5FD7?Mnq0_T!f6vDgs2#h{J$h=5Wo3bwSSJ6Ijj5brAnysPlM$4exMP5I=J$Ttm-^5W85sXSAeDa}fyP@O21<|k!;f4>Aj=ojtMk35YW z^E~Pm7hl)dQ@ft-HTXe$Mkk1R#E|iMDH|j8F2>AJJM^mvJM7ht%Zsz)$}uOc@u{76 zLlHhBB4>QRjxI$q)z!Tu{y~VxaWWWFPK-_80plXDF*+V@KE~AHe#Gf2Hbw?)*efSiM8%D?vwEgc(T|1c6o98n!c^ zW-L69r!f|uBR7^`OonY<+H&5fvrC)2HbG8A@nMZ?(2+M#7N8e0%A;!AzjcJ8B|+W=b8KFB!VNX0g1+3dfa->w#Ej9m~@=Zko@Ry!-}37erS8 diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_lowpass.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_lowpass.bin index e91c1929938d930a208b492d50113fc6fae2966d..00578e69472230214bf7b91324f3a269c7982574 100644 GIT binary patch delta 89 zcmaE*`bu>|kbtG@)}1V&H(0;du2dI^%-ppx$%Kjb6N3N)BLf42n}7fV^W^{R(v$Zw l@kqKcK}5|M7+9MW1c34k3|1hOo6j@-=jX6v0O=86005Z36mI|k delta 94 zcmaE*`bu>|kieYX{+~k9zXtGqyy<-gism2&g?j$pF@0{bdFAi9=(b z&b&GuW*o4-y8hvnwY5)Xq^8o;T3@|*{_@2SF3&U?gQ0DpW?l;6$jaQ|8F)pa ztzSO==*K62yYmxjk&UT;L3Km*JJsV$M^BtoU#PZJ-%zE12TR$ldc>}(hH;bYV(HB4 z$;GAP%f}Z_gys2_!;6cjj)dE{Z!bzOcEF*xqv|EqtNF{_Q%C2QHEHSC{L1AQL%^T+ zCPTQ;3XOL{7+?6hV^hb~zKdJ$Puaa+V`Js1Fdi;fgV@p|s0G z2SV8C@_iBaX6&C0<70k3t8Krpan9xD#87)?w=lis-4ML?e$bQ&=CaQVyQX>o(X+78 zQCpR#wVniH*rGHU^ZT_i64yHv!k}v1J2z!h_;BX&%679=^%@%3N_>z%<{MV=^_7S- zUw2h&FG>lr^0I9C-e`TkPFrK>RBMMTqt=eEv+@B?+I6;z6JG$`=UBS=WdP#bFV!di%;kS^ZV|~r-h=r7f&W!#u#h4 zB|Z3^V2n%1w#OyT)%a9uig9TN`XZOmGmJ|S6X=UlO~NCt<&*JXD{jCeZQr5v4B!%Y zxJ2(9F&}h3^hK#AE6x$e#lHo^J4d1)#=(3|&Ji$hgdUF2r~aiJLFOEBySd)^j3dl} zBZkX3lAkTu{A_c5=z&Mu(FbM-pZ*3{c-FuZ`oVL@)>Lz)=1TQm>=vbnR&j)P2ApA} zey-Hd6^PMIYfXZ-0-2ELMo$>n7jmAhqIg5SV`wE4#g1?|c>qnGcGC4EK;Y z2<*e+AoLIiZATxNJPy*j+gCbO%nXb{E!lY4b7kMd`L6y zCw9_n=FV!(g~o{i8|pRIWFBLV)uq{));PuUMrJ#XRklNy`Ewe>R+@j(cGWte&r$14F(_Rv5T!S<*uHOV{pcCj3Ec7($9Y}*YRy(D4zd9=Dgz> z#W}J!^z4gd<|{Jx&H7$Pca<-5abHt8`mRU+JjWJ&>Jn$;FZkSFu=p=b+xK4>%NeBW z@-@hg%ezk8)NJZg)#Quael^ss7Oy^k1De5+RF9vx8Zu8(b}Gi_V&e| zGvTb=e(vX-aE!4B?k6^U%=dydy6=LAz0vRc8b|+v_Je)F4r5&3i#f;FLwL+_&8Vj+ z1qeO0gQ|R(>5`zI*Fp#Si&9PXt#P;N?R&%Whn$Vuk`Ch%etS+9IlAeKQq71w+E$!@ z2Uor8+bIR;!$wi68KKW{^hK#A$?tN_-w^wf+C?vTWV4b{cu#vMfic=lTP zLt8gO&d&3C_?Y<$q+dL*=Q#I;`_QTKv-s1ulk6`(ZptU@kyivqUNQHdX9~sNA8-Vo zGOtl0v0{5+euzuR+;7hTx{uaxbgEfu=aY9I`-y#Q8cy#%_(PtUKF5N=uVGj}A7p2A z1{C*+XB@U{UOY3nonmxtJof#2kjM5dbXQz1g)<)WyH38(%yr%&$3A^gsu{t%t+?Sl zo{$3cVWTM3jL_#e`l3`bg2$;{^n%ZM3&PM0n}n zeD(LGeJ9ntd<1w27kOUN58`*ed53+w*Kto0gNVO%-1G0mJ;dR}r%5~xA9MY)tr8ug+1^^sV0k`U7y8?5BN3ErAht&_i`M4QL4%GdEO%R z5BuQLn3uc~7~*kykH@#}kAz9_c-(Q$OYTF=85O#e&HmnDpE0-3HTLPTpUO03@v`^G zR4g7hn@K#*y~pDwi~Fa17;~)TaSHl~#|=Ls9yd(%`C)MndWgsWN?+<*8jr_y8&6V9 zQA+6pzm4<`lAk6oP9BzhoYpmk9CO-BHbH)kvai>%o+kbMLVMPq@40qz#uRju+rqbW z?f55ItFJr$|F7F{`CMk3@tEhc-z)m_BaYlNh4r})mPhVXhU4>jrAd;zO5QU8U6&d06!uC literal 11983 zcmeI2&yN&E6vu0Nmtl5MTsOfO;*XJ|QM0a!#zd(FW`v7tTp+87S;TCDCJ14X7!PJ7 zs}~cGT)h}C`~&L64S#|Mj~+O1@W_Fyem}43%`~+$xDbt+bR|{QUG=T^UcLHub=RBe zuN>R+(IY?o7?e6;&nIh_)<0d_`0%s!g?Y8KXs)+DKOg3DYv+@-jdSPEUphMLA7gGDllcRh3xIZ%&rWWVYlB`R{ zt!~1e)zoK%(Y!lnv}C0A!wJ{^qRXu%_0KNmCB3>U;i_m|ODf5hkaH!=nH_Xm4a&=~`KGR#7+_)8j=fTe!GQ(K>+}}Gl0EnFa zW>;lOk83_PjA5&2eT*OG) z-%Ad5*D%H<`gX=8*46kFHN?2I3wfDK$Qj3_j0x0LR8iv**RsiYupKwzk=%Evz6Nj! zJY1r7j+hNvAL=TqD3Wu;ars#=ymKVmVH_;y4=T3VRJap&so!Hm8Ow4Oh~8ajA+TTH*-r3^+qe zv#&J!3dC5d=PK&XzAJ2B$$V+J(!7J<#U!ry_d~O<@a}E6GKnkj!@p~r@0Ert!?VMf zcMx2$a}b?|Ubp_uF1?og90cZm&dRQ@l-n!LL1u%_L5BN_ za}e0SItL+#bI?xYfho^Hn)ht|TwMuMMHON2+9-#h;9pDF8IOImv+s~uzdjhku0@}p z>X!P|)@EECiw3asYA1P&h&GQKwW4(`F`hPTtH+wu-uXrC_^FC2isbTn{6t}0dWcDos;FX= zY%fuq&*Fu<)eaAtLlsqoj{30Oz33|C@;tblC-U5|3%%6n(wy&VCw_PCV9VibCvD?w z7d$+Y?Y<=p^81R};TOi!#`Vq2ua`r3z;QhHqvvE0Lm1`0@W@gc#;uS+TNPELZ;7o` z+xLXU2eHw0NrrKWxqHl&eq>WuQN@Hf*>;?N=cd}_!4>48qlzjf$a5TZ6;;&Yw_NiK z;g`Bz!<7>qSZQgWp?{Pb9ENlfbOdhv$oZG^E=%)B9 z_6+sZ{OdN-kB!vWSlUm#jYLf!966wCe-^AW`@-zV@n5&wV|;F-)tlWsEQDV1ZbJvU z45xRSaq4ucODq`QFZuw;~> zw!!fpDQ$xTW`D*CX3r+;$leB5-B7;Z4?|hVb$O1XuA++JGnM3Vw&46; z*Na^6&ABJ};lFt9As)awQCCq#;-mIV<0mcleVO+Si>rWjjyjLV>?>n=v>i8|m(HV+ zT_cW5{g9WAqpqTg3B0W9Wxn8@m-G>{q5eu7ruOsrcK@iemi#^LIFA`|A9BpdVp2I) zKZ9+% zEfdb;$l*M`6M0}bkK5d`Jo)5~-#)OqiYkiVKK%cx*n}VFWfw{D^E+zwS^S;G{e!Oc zQPh94kk5wWi4~KG_mYr(BVRLjQd|Fttx{hHz06~O{(rCQpiN^t#P+N|>*l%@RfJ%_ zSNM4J8ZOr!f2WNY;YGEh^Xl$o!@R_lYYDcW?I`1ST1)e*VXDz@3_d5`hx9oPUF|_v jrTnk#{jQ%_y=Swpo9qGyp0+EwEzNgu=yi<=A%;Hzh{P^w diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_apply.bin index 13223fc1760aa24b72bd0be752e44b6d70ab266f..28f69506b4ca1ebd172dbccf289326892bccad6d 100644 GIT binary patch literal 1606 zcmb7D%WhIp6x~o>rKUxqrZT!|92p;oMvVhYd9|2WnnDdap;)Q45g|~biAhTuXC_Yl z07r(2BU2svC;kF)Y+UQyv+4B)2cBee&fR`?p~)4={35Y z*R5U>>HuwW&SPq}yDwiH44$=;lCb8p9`nxNptHN16vx`4gU0h_yWLDm+G=9`Mt`T* zYQ0K>+~tq=C!y1Uz<=W2ghdMVT>j(F#b2q1mp=b~`{lvm)uT_OrfmlI705ft38Y+I zUEjbRgv20sAw0wr%d-F}n3wxQy|Lp_ebm^fRLiw;WnF5;dcIQGEXZgys(_bqh$F89 z(c|TXe{E%RwOE5wb*)%G35hVDYjE6;N#L*}|* zPQPj6_tS*TWD@R-THqKvE_M&4leZ}H{)fmgzja>5m?cli;!B5iwunnU^eCPIhVQQn zE;g9OhaBZ0Ilg$Vi-ad!^DZt0-IDc9**haLtNWw6K$Z-{Lfm3*i9{8nIu|2y6D?Lw zwZ(@H3Cvt^&E`&H4p*RH?q1A1Fvk|7dd^ATc=ALQbI)RJp3Cr$sZD*jQ;NgW)M$18 z$|0(GUe;W2(}%tE+c1ZiU#GE|`^70f=+&f;nw$3Q25d_not2V|f+5J}=`$9jjO?6%_{x|%%2>e(lIf>O8yj=zh=%Cf_ zz3L2Hm}B(GnTV_1?Z0@wH+tG}#WC*F5%<<;ueZJJif4S*sP(Mf?Y3RX7>hk@4YvlJ z&dUsvhxt>(_2gtq)4e*D1JZu+`IPr;QfzF`3LFbuM$(!H;4CC=sV~EwCb;{ zt>Ybs+R(dD3h~5J($G?H3LmrwejNOVt@WB;tygPnQZF})wc18WCX-1Gd0B@z=JlW| z(Y%PS=Qmc$bp-jVdw({ovsQN7~~J_>?2%RDG`9*S}5f NjZOFTez0~q`3=@MkU0PV diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_scanline.bin b/bgfx/shaders/dx11/chains/hlsl/fs_scanline.bin index f0afa387857ed2ddfaf98ed12ca8625400dd7019..ebb0d800d7813d1b1a68d5c00ae7bc55670bc440 100644 GIT binary patch delta 842 zcmZuvF;Cl25WZ(@#|bjAjUZq|o2El0P#cJlpbI1f+^R!G6(O}#p~xaZD2hTl*J_qZ zNQm?p8TbJV{Rc(-0T>X1p;B2pX6VqV_Z*)Us=mSR-gn=9ckg>{+gEARtGpZ(?d~1W zGCO9u(;i-&0U?iIeSE*SwOQY-)qNT4`VJJMRHiTWp;_CmwwSTjxyn7?h-h{nZKu|1 z`Ar8J|H)N-Dd9kXdGSCT;%hN3POvJTOg40YmAA{~Kkl%vkIg{HlPPWFJh#!w3&$JR;!>xHdvLLpNa?(kF&+gQEntwC$jeDQCss-oSUvhRl%izB3x|wHc#+6z Wx-DPGGB%xH$s6j`FVceme1pGx<#WCO literal 2179 zcmaJ>%}*0i5T7ozr7h61Q3Mi`Cf6S-i3bznm5cuYgqt@GdQmT4OiVoS7dW#!Q{6?MLgCs%e&RGK!`O zV+;gaKzVJgX4X~E7zq(#l!}FtnKg=)yrIH;2Z-Y>Gjze>m8%vWxFvVtg7&)1C}=_feO2fopbm-GO7imUMQDT_{1>QYDdc&8|6j`9S<0B*RpkU za|}CcH@AKN#{)2(nTqP`&wl9M59ytyt%FND!z*M>SQpNhaqQywf+LZfnJeN<`W_tf zI7rBzbR_pO!vAwA(iFF>wMui(B54U*~Xyq-*?68aoO^*j0kq+*$N;{JwF#rX=xZ*qVu}bA1u1w`|&MDQ-VN z;E?r-hKdu3;4oM?9)z(-GtWRzz=&m%k| zuvQ;xDoa}n9#)bE`Ue) z!x6?l$$f^GU{?U#;v>3ic#gtD`1z5aeWuL_*3!Zyx7Y>HE(Y-G5TF@dJP*gnf$rlw zH{X?~_AGZFcYexGcPp;gwu%Pua`64c$Jk)x>*nv<2$A%N9rA2WqJn&c6ZXe1oLihY zu5hCo{&z;h9eUB}+}s#PV$weWbN98l@!i1RP0NPuEzYP0+M`%!LN!p|owX3hf7R0I z9*DoxEwL$yoGJHdpZY{xEsVKZ{8%UbBo0;P#;1ksa%`t)f;I6y(*TgSe#`MLrAN{iCpN;dI$@)27}nS; W|6=KnqEXh<67RQbny`MINAMSRKig6O diff --git a/bgfx/shaders/dx11/chains/misc/vs_resize_blit.bin b/bgfx/shaders/dx11/chains/misc/vs_resize_blit.bin new file mode 100644 index 0000000000000000000000000000000000000000..a2e8597f8a03c7eab303e759df717b265c9ffbec GIT binary patch literal 673 zcmZ8fJxjw-6unKXmio~wu98vFK{AMwRNKZDqzO$45rjaos6{Pkt8NzD9NYzefZ!hx zoCJ4&g1GntvblNAOJ5W(+?$hgKhAwG34{8yz;ZXqry<2*d~wvh^w0Xe36OM=*co z0^EmdBS$NhM8XuRNS^bi0OEfwv zM}wT~DU=5C%#-h=l#1k)-i$~P#+g{Eok>0g^;%TM03TC$zFt9cySPaA&Q^2sh&YFt zSeAMxc7Um=F?9~mlh|nub6xh}U1JBBb+}K1+&Ye!NLnAxr*&GBc}JwE^O^@OlVfdn zF6{+X(7Kw_^}K^Mk-Xl+UC4Th&RE+W*`rMkhVk$Dy0r-v<_>yq7rNZv{q4)@Huwq5 JJc5Ng`~hfBNO}MO literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin index 780d19ef057e3872cc388df99a048491883fded7..d46c96d548c9a3d0a7cb5d3a430f435c19b99729 100644 GIT binary patch delta 282 zcmX@avVc`REZBpa0SJ!k%$~{2z+W1lnO7EHmYG@}pOTqd%*4pbzzC9_$g5ND!31P5 z|NH;%zbS)rh@+DXkh>ft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Js_i7Nsb*(Uy4rP;v1@T7s6;mHD^ zNkGK>fECDQVE7Lf2YLbMcAf_yHIvse8Zfd=zQ-sp%Equ_0TYA61XiGW1_t&9Muuk% JY?FnU3;>TTI=lb? delta 204 zcmZ3$dWeNLEZBpa0SJ!k%$~_KQC+8=g$c-G{`ddie;o$r5Jx8&Ah#K$0w@NO0`VCp zGBDHtDHkASVqjrl1kwRO3<3#23{uAe#5q6=0;TaKsTJ|XnN_IH<# diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin index 1585db0801f50811e23620e1a2611f4a955e1fe9..ba91955a7e2d27e08fa70947d05647bbdcb871d3 100644 GIT binary patch literal 7852 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 literal 3071 zcmd5;J#Q015PkRI4-te>3MwRALW7*}14u}OQiKA6B|0Y}0U{A4iW4cKx-#V<(a~Hw z-P?}jyeIr zmrvuc_j+SzXJd9`nK@LCUVr=DR%bQ{%6^|`1TTu;#XOdtFFv|W^`i!$E#gNy-UA=_ zdBG-IfDr5a>e*up+2r+zP0uk~NK4h`riath7}wn&nB4agr?=>XY_mTSlS9hgQjRGP68VnMNMd0)mm3v~$%ZlcZ%lwe z>ivWjKVijBSo#V7;YS$nM;Px%7~{d_7NAHY&e5+qDAy?6crgzATrPUelXK~&;#j^I z(b~gO4k;VI5n{^5Z@_hH?w((d(OM%I#$?0TUK@sEJ74DCVkE|WQ$CSi2y;#^CUmQj`rDr zt;RG;|5o34+of(?@P16$YCZ3?ln05w(}6sAyw*nD)i*Q^FD}qDyvZ^940Mm6y~#L4 IRun}20XakKzyJUM diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin index e28567e6b602e1f62e9a09e748e90d241f3ab939..cd491a41032cf5573038c2c491068fe114af6281 100644 GIT binary patch literal 3535 zcmdT{J#Q015PkP$TS~x61XM`4ga$eA1IU+9icmnXL}wxh5Q!*J9HfZqiWHQGL`QS! zknC_5@!Q#*+1aW)xUHA3o&d%oiNHX(IGrGO)_gn4xASmY@U6FcG{4MTb<>}J$O?E%a0A&$>)W=8Q z6MvquNfsc)bN=evV++}|>LHuH4{RYN<1*(SPEKOXx)JjdDBYwiVvC)QY>YXJyI8vzTDbxt?cgXZNDX0Xy0AH$zvc1(adS)8*n-R z25k92^2p>IN+0MC+mht5$=Oc_z#YXl90MX)wY_Lqtwa6B!!KyyhqkIH!{*q?~i9t9ipb24e1wV~c5o)jY&%CYk00 z_&$;?Q;&P4&Yu*GVXnUPXv6iJT!U>b2ic}id4%hf zEvE959HuetNBEUqb$brjM~Oq?PKjgUeu*2z#YjJ)et>=^pAz~PQr~b$Z2l#PiOs(R z4Pw*R{n)I=g=`3Ym=g9LZaY$U9Be^W)4a$ut?Lj_hkK(}V8#aBzF?H;mV)86~`5=Ai za!u!h_lxmB`BAQz^xXM)Q{Uq6;<%IFI$xm3bf%s=#faf5#$r@4roEqyv2pIC@3~Wq zdhQgXhN~F!+<`GJA9Qbc1oR0!lYU-tImfZfz-4C&xPkYUB;W^Y%<<{9(zCa?oH?2orZX`yF1QZ?NZ#;i+}f& zGwgm?9Rtjz^^!aB$t%PA@q=&S@0{`H@(AlD%7&vHJgu?GynEqqp=u|e+gO8>H_L6I z%Q03Lgor7(x*%k3V?HeNkllIKcrI^wedRE(Z`kw=o4%c$>9bC7KG=IGA37Oat)TbO zY8B-_Kd#zEIeENqwM8{w+)j>9>T6B;;O!^q94F`>tCp^0dXFuZw5Hx)jnTIfD-Rn- x{J#jXaTJssSzTVI969yrj%s78(PdY>D^A4=8fMq9*)<$!=q2 z{NvL+?7!ID+1Z>QBke=!(I0HT-s;UqQPuBLTj*u^tGtbsM@!4s=zfp^h{gO7AMb$o z{CUhKSOkM7{FP^q&9F(-BQ|;7vKb?&0hcT!&`@^YiXs4BJX%C&mj?r{hI9%kV8b@vAsQo7=!Y~VQ zOf8P7#W7VJ^Orcn32}rI;s{4|(78n@vzT)XYmTZlim$q;24OD$dd<^wNi)${Vlkt+ zC#r7@Bl}t5mbU5}aosZapl{&FS_4OI<>+23hhzI#8een7;*HOVphehk@pb>tUkh22 z=1iH%UIZ;nO^c8NF)VXZwU8V*tA%ia79j@$r>+H~ct(@hzGRu6>Z>6q9<3fEKv#T3YLnTk^S~M#y1Y_zlZ@)2*f3U6=K6iPJ6Px79 z|IQtrD>JJla;Arx&O07;(DTjsnycrVfhDdroi|Z_^96mqKLn1{^uSTuvX7qYfg|U- z#M1iF;`=n?I6U*Do`_!x=Zs%Y`Fci9`ioX|zN}~3Fa3QgjGrJqPB1*yJDJARGp1R^ z*Yl0HUHYm8@5i)N3*KpI4_&y^fjR`ftc|`u-_TONXn~gU)wb+2lzRm67V|L8%aW|$ DDRt|! diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_lowpass.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_lowpass.bin index dac4b5405b265c487faa134a94265886090fb179..30639e37083bcce68c822a45d729cd50d72eb365 100644 GIT binary patch delta 26 icmZ1>utH#iJQF(u2S)=V!~e}vOn+Hf|Nm!TU;qGQvj?pJ delta 30 kcmZ1>utH#iJkw@vrXQ?=j0_A+3>+K{KzhOd{|pQa0D4RZVgLXD diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_mipmap8.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_mipmap8.bin index 8f1ab318d1c25a7ad736b7a453cf8c104fe03e41..dbf10fccab97fce515cb3da7c17a8c021628d765 100644 GIT binary patch literal 8702 zcmeI1&ubl36vxlJH#6_$SJOu6s?Z27tOZFBm(nzSNEdaX^@+Q*)JP-7gr=3^Y6AWN z5xQ|VZ{a2p(WN3Z?pLu;8_ndovpEGmMxq0L2 z<%thZfB&87C%5*-((20k>h<-xB(Ve>sEr%9mX|-C6I`M0EN!f=t=+yklQb&S#GR$v z%XgPHRz6*xn;8(+u=6tmiOo;uUYkjp73bX-q@>yJ|J8rjF1>Sc@r=Op=n*d0f57&+ z*^9#611-Kprk3FK^NpUSp2QmV0|@>6q^F@jhW1I|5-bPzOx7PD0A z=k>&>*v`&QYLg;~(P7WSbJSjp6MIRJnFjq*YqfyY*7K&|hz2iXY@xOb)f0gAjipzY z=IqUt8@JXr);_pB`_kLzW-nj4dS&+N&Fk+k-41+iOtM`5 z$pIdE@YjMpryL*jK@0w@N+gpaRo)hB(QjFMx{T{YYn6@gjUu&fDO#0iBKoc#E7MR~ zz~U3EXA>ILbz!zAcy9|>byy_!t7JG&)20P~QNh2J6QWUGi>B=tx%5b36B@yrW}P}5 z?08Rlt9{X12@iS{UhzB$a;uiv_9BOr4xDR&$Pw{a87fUb+7^X zndD{myPijSEa;Pbtsh{AVwp%E_ONbf?RFs>nVEHpMe(U71s@dF-Y=1pTT8UtlCdB5 zBR%`X*lbGl_mC}`ds@4_#8CW_@k{X0NqBcVxo6Py}|vR#_(G(_y))C$EbZz zPN+^!9M{Pab@KJjQD=sFE1eI+GlR3b^~{-3opFQOs$l8xvns;%vntiOlImPZb*^}Q zp5+`GoX_fMb;kHv=I0Fb2YNVry{F&|=Ir83p`KYkd+z8R7@RxaXB<9vn&Awl2a0kz zzn@C?b}3%{O$1v>pOjcP^h74x)O(aX(Ke$8P=6BP>Rc_KQ~!W3sdYB-)7SgJMWjs> z11TyK(KbX&pTzmxkWXf&_(1RW<(6Rwu?h6K(VNgW(5tnz_I}QL1bm^-cqpDfL!1*E zm#jy^^@9$05}mvB2;|56g0#}nm5zSs71a9&S*i7Vsm^k2C5NhoipO=e?B^0&&so;M zPGSaa%UaTb9q=`@Mz)EjEqnUCmt`nEv@O-%ws2j^p*Ly|VA&UBwZ)%^273Ataz~6J z?7d$n#C}XRW~yIeKPFoC#uR&Gw=IdXdy*aap>K=}6|26`>&Z6JS)-m;=8m@QY2W7z^j7rp!!|t+%>sSoo|%OF^KRDbA;P?? zyo)~1JPq{__Y!>rTpqkGFMbbN!EOt75Z}lXbEO$nJRw)qP!Bo!E1c(wJ#a1K{UP4N zn5U`*lRo0xs@{zlCt~P)%op3Tx1)Gii4B@-MZYijNsn)~-W;v@R(hY0j}6sa)AoAf z+K)4vZX80K`DR2~cpHKDK^4DD|38pju?EH^o9~6sX6V=aEd2-6Y>AD-`W@2bHYvH` zT??@WuFo&<0Q)TAvlX$Vwy9_Qa=D#gD}Eq@T)~4KnVktbB&V8Hhx}d(o*TYlPLEFH zq1WYehD3SMueN;|{6e3ry9-&OxEt6rqn{c^cOzmP%w z=8}t@dF7Yn1iyG+BR_TzzuDUrz59h;_K}ZY__-(;zw`|(l4?c;rY`Y~eZFz%W}o6^ zpYIxRgQii@kn@RJ&Y`K-1$xQ(cy-nRV?&J1zs^9V{Gca$N1EJm%oF0 zA2r{{?Awv`J+-B;;&*P;@;*JnHGgu1eV-WN_kDVVeV?!=Bm12{HNx-v_z2hh$r1FO zdp-L3Q#Ie2V~*F4=fAhT4QWq_IQ>ivA2k9EHg`~rqQ&M8CqvGfdQQ|_FGc3?OB(T;z% z8@v22PxE&*V*xWOVHft{Ys7K)$o+}m6>NvNaQ~tCBs?CMRJ`5NjM>x_nzZ14!S|A| zHql2~**-+7EYgCHvgZLW@1;xOS8r-{(Hkf8WWyO^mPZ2DYLfHt>Vr7ZXFj lx0H~QI|S}F&Wo3aJD#RyeD12~r}g`3#nbh2ciZoa=x=92u#o@& literal 8702 zcmeHM&1+pn6hHU-ChsL_QgIe3?p{ibG-6C>S}Cq>z&{{D zHtz0QxJg8GsR)gG7jID{?%$#n%*sNG;`R4CXXd_}eyjvHFRu)pbLPzX_?@{kb0%+H zxzzgj`5%7}{8Gucdh2VO>sL1yfsIgP z>h0dv+UKhabG2ZDyEs>Cj6Pd64JG2NbkWhXi1HWI;Lj0qeLo)EYhZdqWd4DR;BK2|<2-S*6jQ(?I z9u?W&-;bpY5swbX44$Wrd7L;FsLojJ!>lv_YxEZd;6R2^dTc2z=Ur1`bF24yZ$aK( zyLMw^YvZGv^RK*ncK*`kE0^c5T)+C^>W%q}8|#~EpP;k2@YAs(w2NQyCRW1FWDSbacAIk>(u!yBwLKaIjfP5EC%2<~cY0LwS zwoMtV>q2Azday$p>#zvqK6KceNM=BP<>=qb7G#juB9dW|!VU~ZlmWdh(rMD_#|N7`%?_jLcr+%y#^pCb<*rYz%Ptd0iiQ0pH^zYISU>U$3{b4^u-~6I(>P)0lEMp$lB==^bH4nmU;~#^~uLW{I>RL;t@hmO*rte|@fy}0_+{~Wo6UF`X97%!FEKMr46`OCiBu}n z#032^mcLFgX{?hrFlnExlVjh`6fl`O!Q>bw_;zqNxU(OQ_JVp3_WQ@U?I+V%C(|eE zEY>Jgc+E&J1_P)oaVquwiGFr<-S0jB_Q%xf0`CvGsX|=TLn< z<4%h+#?CT3XDEM!#Baaw;!y6|%YU;tZX z0ND_-yeIK|4mBnLK9o2AQc36su~GR{csJp_fp@hWeY?-u9U+6Cyk{I@&fki2Ad}E_ z54=ika87`8mv;o_$LU>4s(y^KoW3%LSPO2B*~;YClD?jmB&46j zjIxC*05X*4eT4WhkDj)> zUq`W@fR72*FR`D1EXO8*J$2_2c-?*I*7=mrA;WwS3)BP}!vuJ=Gs;V)^rXo`SJTg~ z%H@ce@#pdob`F(C93sX0Q0>q!#z6f(Coy#KE_6I6qVo}|oN&Qr{TJmwMSs&8`UtKBjE{m^`6KK-4M>j1iOha9aJ=8!Q_7ju3NxwQOO z@UPOGr4nGgTQJWa`wTRAefS1B37dIk-I2=x<5p+ThLcAevTb=_En<0KO=90bio868 zKlZ&)Pk=tZRep<+aL#>Q4~;RG*LFjnt*1==7WISp`Z+#Vf#yK-!ZoB=5+mYZYuxgX zIbIXF`dQjt+pij(bKgNEM>3(6g8TI>bE^~VtX?|Cu{eBWO_cX2> ztDD?+P8s+@pH6!p-JZ&I+C{VPkn+Ta^eE;dekY~j!oBAR`bU1z*AR9yS<(EGrVrjP z;=nV9Ys34+{oUIomKN`djuShJwS#$g)sI+SP#cKP`OSKoIqV{4#x>GMzo{>k6^vP( zNjd>dzm_r1T+*k&)sMD6@O$Nc!~IatU*!7hI_~@#ap(UrZp{DR;$~bvZte$+oBOWq zRmWp*HF7>~vEzIh+q_T6_hTD-EWL01J~wV_erAl<{HZaHy*0+)`^*@}-jWAnyU)*# z@%KJC#%uo67{>13-)8IB+pZRSvWAPES*0NQHgP*TVZAY(Ng;|f_@yT9>;l0jB$7_H-$ zp_4LNe><5#rXjPVHExLi?d@V(>u$b1^8Li#3ih`sjCaEj zK3EO9ry!d0*m76dD0^#v@Z5=$Sz)@E*Nw~$_An@Yi2@ELrC zseA#;@!Uy-9VYORn|sd5&F{wdWch5~-e2y`kz8Zty8)^SO$6j3Z+BNfw+JWpY~M+R zK6-$^5eM)X#Bha2dwOfp2+%K0-Ny=GeM>Ap#-?4s0yXP{WC8!r5lFJh^9H(?c)pF3 zvEQ>F(IAD&ozEQ%>uQ+fV62ZJbni9$S#rxYjCJaT2e)TZcyhB&T@4dzY=cXxOl3h8 zS5kwi8>aMh;Tg$n$!%dzPK9goAnL0920y%2FWW2qnR7pRO5rS!3t1q1y2Cqla-5AV ziki|;%@swNIV diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin index 5b29c618573b0b3bd10c4e1fe783f194ee723d0d..14822336a8d0f85bc7bbdf5a02f55d13c79fe8da 100644 GIT binary patch delta 716 zcmZutO-LI-6n-{wL1^s3MhFN}F=(Rgp&%Hf+TNN&TS^Fe37TUUdW;}p zj)JVTpoD^lfCcNR?L|C$^3Z@n4_<}Pi`#D}9$e}$^JeDz-h1DBub(}8=)HRR!X>Q9 z#>H#1?M($!YMs=h1zFB=&TWxS=x62bBe+f8gH{ngVNY9q%=7;fh*#I+fMSp4& z>A?2!Jm=VKHi6#(i$G~&tXvMHU3PTaNuVspjd$CsJ z6nm3(C>4DA`)HQP$Dz`ZeR#A)WVrHxWwHY7m(G(JuqCi%+~tV%I5!@Dp;eG&j-nT=N=3* zzsIk$8wv9}u|n3h920U&`wqLHmtb4^XV`+V4SQ--Ve^UN0|6BSHEYCuhLVMBCW_#? ziQG&QYDrpAii|A9qpemF6-SD3EDX>m@-Va=ZVH(;pBf%Ac(P)CV4nPD77Pb}M_!pj zxBa`;Hkdst{~y!0@~9$bA3RnuP)w^q>d4;l2ZJ8GZzpNjndrWCDjWmuis%0T%(

y$~U!uogjFzug$fk_^1}_I=+s@4bDqf9bdyKOcKyz%w-c z<3-Sl@3vmo-r6z&b(Wr`kMVH){)5X*e`X?L0YjFf1spIe&?Eu~#*eh@e5Og13fNkX zc?E1E$NU2J4YzR*|Kc_1e|gLF^Zp`zfAEU_Loi%1tm|{h z3epOs*0}v(m|UgQSC2VWjAlNIK$!DDIvaDwtYZ;N6Pec$mYO-^rb>5wzG+f+tED%h z?7G51Uo+S4Y1nh|#}nZq8DH1_VVb(eDc%)*8R`-#qOd>VZQD} L&m>n`i65NsW;UCs#8?;*TOUBMQX4geU?Jj9yJ*~E3q@EHOBXDSl4VORQi}Kh z>0%b&Kue2&`wA95DMb;& za8#PEf8KIizIWxG`e%U@Dq2{-w#W9bWQ~>SOxLk>u(7$w7Ig42jXh zZRTb@G9*;~+CO{ASz&_pat0KrZ@?S{_+UtkT4_h`OEVLlM&I7DgGzVpxz}gB-t>0| z)WII0O5|C6HX%z6Pwo=(#PD)_D;m`zz+u1wM943~a;!y7*l|tnR2`&auabMEIFR?N hOw-V!#s0Xhp<)i`oO6(z()7^OnB1Z-kan~N@CTexSkM3f delta 283 zcmey#Hk(Z2XSX_{rT*Ac2HqpeUo|S<8il&HMci0_lT+3=FIslQ%MoGjdKo z$(St21~i5h=pqIN#s;7<4V;s0nZy}cCxYU6vn@M)1-e?VjV1qs}CSJsf*e{a1hbB2CW$~C_-!<4LDk*A!8jniueHC zYJ+c}qeH>Gf`cHremAW{5BKn$^ZV|-98TBzvDS_ccW1y@eCqT}l$!2IaOpL!q$omY z4!i047cIBtd)Mxne;!C-MoXJF*2Mmmyklf4Q+4bdZEY{J{nGEqOp5Li0iTqRDKY-I z&05DJQ^L%D`)4mXD@?I|&VT~-4OpN6A54kyDDCKdWo~NH=-XQ@!R~E5_Xo_^+rj>j zIy?Z(GI>^?PskGI^gba^G_S;WqERiv;WA(VA_SbU5-U*?R$P;N)e_Q)XVXJijsy9y i&N2-RTAYu^7@4dAm2)nVTbdo|JGwUL3#1*T0Q>>oxmkJu delta 283 zcmey#Hk(Z2XSX_{rT*Ac2HqpeUo|S<8il&HMci0_lT+3=FIslQ%MoGjdKo z$(St2#t^!I73d-c2F3;khR_Di$+k@5jI5JGnY;zr8J+L5 diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_lowpass.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_lowpass.bin index 380fdc6013d1bd2b073c39ce156628548e6955e3..825a970fc4840c0d262d8729e8ccec86ad9ee517 100644 GIT binary patch literal 2981 zcmd5;&ue2<6h7}qr)iSOYjNX3u?#M31?eCt2y4x4QETtGx!bzg34<94sFwL|^G5sl)^?}U-02>+_xHo# zT&BVzQysT<53h&8Y^JGnn}>UEHao4i_g2Cn&d_q#2YBhA{dx@NvG@NlSws)g2kG;& z{_5o`k6`*cHNa-@#kqVa@+-a^Mkvax51F3)X3~2aD_No3~mwAY5E|>Y{x1vdBzHlEE*(J$eOW{qaxlu75IIt`naFen0tc z?SAsYy`A2BpMUhlkIxb>14l}iP`Oone|<9d zVs5=8f^*fud)lV)z=XuU6zIyxg z!s?yPpX&(X{V%AW0w1^f7`GK9M3O#b^nwdAIm1Va&l1n%k_#uYIMjTEbrF2PW;_sS z^wD+rOW>DtK`V^0Mr|lZz}1FpX_L~{o%4JG2i-t@hQP(mPR$#xER8_`Tl5X&vA0G4 zAimIt_Z>(H^Pyi4PQ4|G!!mRMV(HpsRF!L(OUQhx@VSg&$}1?Yb+(pVG!NxfmZ6Ug z7l_mFgL>t{oYX!P`b&G9gCF9B^y3&SkYL2MAvlsRu~2HXcNOUmDv}N!@@s0a8Bg?- z=aA1Fc(YbqL(FU-;wlPRpxz6^(U@`Jz!oj z@_g^)|C7F1VrtU(0ONf-8`>j{f$k5_XzCV_=fb3C*aOxxDi`w%u@}^v zjqWFFakgi)o|dQCu|Ae(5wkqaKke`Y`8;*M`)(e+t-Oo-)A0MlJv2@xPxDs2*|46J zr+F*J*g5YU%X#Nm&O679H}43>NVJb|_vpE`JA*vW_L*_FJe6bd%xawfDi88tthJgKxY@b;REol=+(ld)`k|82trvsA59^ literal 2891 zcmd5;&1+m$6hH6HOXtl@n-_7b7>Wy%LP-!5gh|pSiwY6cI0aWjNE13GWlAO=DhPM% z!bQ6n|AT1}gc+d-DiRP2cF}Iyt(ch+I6C1awVmen`e)5f z>x=c7I7&QP-D&Q&*7rW#YF|m`op^mK)HqR>q zul2~V1iK`#+wC;pZqCRDt+lOor@gT~`PRo%lNXj(mM2#(uU=Z;np|vOz1G?UGdpv3 zR)!ymjFlzp|Mlec^Pt5yzx!eF+rf05cnbV+_F&<0_Ws?q?$%YW7p#QL9beu8|=+#7Bj25ZzK zKZb-N&%=y(?(i~k&!;AS&Wl0MbJ&%j3!PD4q|w8C@t47#?_7@&Y^+XBz6AV)jU5>% z_MLqUeKEj;_lBuRqmLbmu@m4&UX~!17})h)tQ58bYmfNdDM{iAWFiIiV4LMNxoG_` z_ZoaoBbc*|LR)iaD?VqJS49RsHs2eTTull10_60ux8RE|-%$%CjGIFvY%ZdvBA)7jW~1Q8=gX9nh^_lZ+a zJL{(e|FQRpQw@ILaqeG1J@g@iuaPBJGk2~qr{ItK!CscUj>@SY_EP1K-c}&POrTVL!=-^HGfb)cJ&%&L_llKI)&gnl~^z zpK-TGIK%GT>YYKG<9nul+5^Vqw1((|)Ue?KgMdV_ofyyA$Q5y%V`7$ImSL&HIjf5#Hs*SgXp(hy7N$>Lgx2 z?6+b^?;rI$!kz5y_oI65E?57w)x7=pqsy4QUtHde7k;<%TlXUFcK@x&xl7y;w=+DG V?z?*iORmK4J^v?xZm%dHcn0qrQV;+D diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_mipmap8.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_mipmap8.bin index af9290274eef6859edaf3937f5ccb7b516b9c941..5250f665c6821e34042d5cd6e151389edbfa4cb9 100644 GIT binary patch delta 238 zcmZ3&G>N%BEZBpa0SL0hcI{+h;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#;mhyU|@LCz|8Pu0nhSaN|Nj{n7yuq+G3EdO delta 127 zcmbQlyo4zxEZBpa0SL0hcI{+j;3|zT%S0z~CI> z=p+N=21CVwiWoqAhKUReK0wLSaN I|Nnu~06B^r`v3p{ diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin index af9290274eef6859edaf3937f5ccb7b516b9c941..5250f665c6821e34042d5cd6e151389edbfa4cb9 100644 GIT binary patch delta 238 zcmZ3&G>N%BEZBpa0SL0hcI{+h;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#;mhyU|@LCz|8Pu0nhSaN|Nj{n7yuq+G3EdO delta 127 zcmbQlyo4zxEZBpa0SL0hcI{+j;3|zT%S0z~CI> z=p+N=21CVwiWoqAhKUReK0wLSaN I|Nnu~06B^r`v3p{ diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin index af9290274eef6859edaf3937f5ccb7b516b9c941..5250f665c6821e34042d5cd6e151389edbfa4cb9 100644 GIT binary patch delta 238 zcmZ3&G>N%BEZBpa0SL0hcI{+h;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#;mhyU|@LCz|8Pu0nhSaN|Nj{n7yuq+G3EdO delta 127 zcmbQlyo4zxEZBpa0SL0hcI{+j;3|zT%S0z~CI> z=p+N=21CVwiWoqAhKUReK0wLSaN I|Nnu~06B^r`v3p{ diff --git a/bgfx/shaders/dx9/chains/crt/vs_crt-caligari.bin b/bgfx/shaders/dx9/chains/crt/vs_crt-caligari.bin index 43a2ae725151142f93ee1c0d8739535daed3ac11..771748125db0428d788621cc69938b556dc1e8d6 100644 GIT binary patch delta 276 zcmcb^yo*IWEZBpa0SNqEXLvF*@R!DC=9R^lWu}(Lr)1_9GcmFLd3=qv3AaNk50AeNv7O;UZu{N+6 z15lKKVG0m~0GbY0IzBscg6{sBK+<>C|EQZyqC+>1(WShh| zNwa~0;YkBC!;=L-lYxl&0V|Nr!0;a|4)h2U0|U7 diff --git a/bgfx/shaders/dx9/chains/default/vs_blit.bin b/bgfx/shaders/dx9/chains/default/vs_blit.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhY6rA0?+Y6`!A*B$pPy#~4k4CVFrmz(?SP0kTz$;7>J%f!~Sj!!k%IZ4( zRUw2R2>t?#oU?nR@v)D6Z)V=tTksR?^e)d=KzrYwY$?Px# delta 318 zcmXAjy=wwN5XIl^>~e~+OPQdgPy&LHq)4fWV9JB2m7s-J7y^N4J_rF1(u>DggjDwV zH&Ujw77IybZK-*CH}DwV>~H4n#+|s?_U%mutgpiIM1{rD*b_S0?RWbUuA8;1Biav3 zaHiO-M+m&L)hPuHhux!W^(f0}>YlRo)E)V+-QnQPKO-wtvXi_$5BwMJ@!<~N0tvS@ z$3&OTUwQ?s1HpP8HB_f!FqkfOO9DpDW4kj$t4%un7v>^GGme`CUTEEpK{KfU&;Ri00TT$ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_scanline.bin b/bgfx/shaders/dx9/chains/hlsl/fs_scanline.bin index ccc119eb73e4133485786ec8731c401be7c068b0..e9362d0a3f0de56e1e46239474287a8dbc5cf5b4 100644 GIT binary patch literal 1861 zcmb7^O=uHQ5Xa|jl4jc^tj1D32nJEG3euuio7z^XP(iH$Z_C=ICXyyGA6h+a=|S+6 zdh@msPwCyWH|fob7wbjHMUT>p2(JHmAI--0;?iZ`{AS+Fy#Jf@=JH}nZ2kO3c+!+; zx~<~Ilpw+%9;fX-F1K36hU=}@+SOK8jA>7*?LKLHtL|!fy_pr3rpMZDbH%Gx%GILl zRq7=#D`MJpD&l(BC_gH-+}he&vxuA{I^^Wx5M-+qvm&7*jz=O&MNX0x_7OhSbXFv_ zFWQ$*8P~4yNXn;PqwKZHwQ5$3YIg?iTD!4Q)F&01kAgq*>h8w#?15VQ2}l+T!$09G zn!kU2?ljEbEF@SOAGT?mXdf(%HwIIXMdKWU=N!HkDTS|Uwji0(*RVU1DPaxsBvVQn z_ChkHonfyfQ<@p}PBNvHVechVA{q8kGNp`RUnNtj81_RlHA9BU!J?g=IHruF5h9;| z1`M3fWiE#(GGByOAQ0no9-2Nif)%z z8ntF^t(CiQZ!)*Iw7isCE_tiPMsB{gUN2X$n4Y>kO*?mq5-DaHXD~$9EQQ{tQNEjL0WSc6g0Z^r59(!`~s> z2_6uHr5Jd>lOYN+R0u3Nh64Kvc*$2WY}4j&%!tqNf9^2p-%p_~*NQSI=9tg%x#ztT_b#s8~->kqR+kfvU60y#~MVSm`gzV3Oc6Zbdh-J$~KsSu>J z=IGsrzC%5X!Z!KL*`qOhMt*b1f&UUxGp@n+sO~M~^Xi`EOu$x5X{hcNeRNeFH8;G6 f`{6wJ{rG&}%r4;)B(oI*m)etUBPNvoFhtN_7{FZA literal 2084 zcmZ`(J!=$E6uobDH#_;*ow$Z*A-E`lQIG`f{78%+D8xeJf`u@Q$;7N|cH@3%>?WiT zyI2Yq6U+4<*k~KDNMoZQ2-{c*b~cXZ-uK>S5_Q;N-#z!-^X{B?XRgoR7*-oUzY(q? zybjHS~|1Zn~rf zO)lM+ksL6ov6SSKpji#t)keLfhD{m{v=*9SSnqe6HJM^RV-zzcQ9z>6X)c7u9A)r9 z;7@~9f9+YRZ*V*SmorK7J9$l4?p~fff^gQ+SP_35(@UcBz|Ns6gHVw}7xeki9R3~B zhjQOwHNo_eSZqx&eHIpbA(%GbVs8Y~c3bS7VA^JjeH2XFYq76_X)Yewe1C$m-aEHxV9&Jv zBO%A1#`R>T5j~G-`ipmSX5-hf zOGpUr0srD{&jA0xY`&O33jF!_t4nXLjZc4C`+gDd%uyWk5CnorwxWv7+84j|(_ahI(<92)_*Kd#LM0SzwmWSb-|>J>iUia}{wnE>L1PSzrn7 zZlpOJch}P#-Um9s64Bw9_epag&vn4*zdFoOR1w}R8dl_C-HXWW#S_HSuJ@H!!SzJ{ z6v+%DH-cF6;Ln!X3%H698xOKk9&40DxYv<{XIZSfs7?42;^1wMfXArGm^E^hnD=zZ zjYh%abq3Gq7;haKK;Jv?D}moT>+F-Rt+1B#skI%%6{9U{(bjy9yPOxk)j*$HjIoaH z*FnEJ);&4wS*qVkguNt2oBOyb8Zy-doR*#kz43J{-gbc8_%4 zgNBE?6G%Fy2Uoo2UVHG+&Y$SX+zcDPdDbxNaoT_6`aN+k{QP@4>_;UkLjzwX_DMLb z!RJqiv46Z9cLmcuE1VhgHHO-L4Q67?a!?zy4)@18itt2}pkc03(xU diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_chroma.bin b/bgfx/shaders/dx9/chains/hlsl/vs_chroma.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nh3`wOWItTQo*4`1T9@090d_v)I}#jt%FNIjZ)Bxme$eyfkML#Dk^jl zp<6fqfw(#J2W05r=;qe=-K9(LNXU23_uTs(`E=f7^>BZ?09qf*PmdC%wtsTf>;yOG zfq#6_4mfk7>Kw~Q>y=6lOpDrSG&_E$5#0KxjmuWFSCfTludGVEEI4zchXp31_m#V6 zK}W?W0;-s z78#C6OfMH34Olgzn-O;nlNlBmW@T8*Fu}~ttdRXn>xF~gMrmDj9)MPrDo?~mj zyt&BoD)o`MJklBw&?LL(Rl+f`Pbuem`kc6H GEq?=O+gdsR diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin b/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Js_i7Nsb*(Uy4rP;v1@T7s6;mHD^ zNkGK>fECDQVE7Lf2YLbMcAf_yHIvse8Zfd=zQ-sp%Equ_0TYA61XiGW1_t&9Muuk% JY?FnU3;>TTI=lb? delta 204 zcmZ3$dWeNLEZBpa0SJ!k%$~_KQC+8=g$c-G{`ddie;o$r5Jx8&Ah#K$0w@NO0`VCp zGBDHtDHkASVqjrl1kwRO3<3#23{uAe#5q6=0;TaKsTJ|XnN_IH<# diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin index 780d19ef057e3872cc388df99a048491883fded7..d46c96d548c9a3d0a7cb5d3a430f435c19b99729 100644 GIT binary patch delta 282 zcmX@avVc`REZBpa0SJ!k%$~{2z+W1lnO7EHmYG@}pOTqd%*4pbzzC9_$g5ND!31P5 z|NH;%zbS)rh@+DXkh>ft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Js_i7Nsb*(Uy4rP;v1@T7s6;mHD^ zNkGK>fECDQVE7Lf2YLbMcAf_yHIvse8Zfd=zQ-sp%Equ_0TYA61XiGW1_t&9Muuk% JY?FnU3;>TTI=lb? delta 204 zcmZ3$dWeNLEZBpa0SJ!k%$~_KQC+8=g$c-G{`ddie;o$r5Jx8&Ah#K$0w@NO0`VCp zGBDHtDHkASVqjrl1kwRO3<3#23{uAe#5q6=0;TaKsTJ|XnN_IH<# diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin index 780d19ef057e3872cc388df99a048491883fded7..d46c96d548c9a3d0a7cb5d3a430f435c19b99729 100644 GIT binary patch delta 282 zcmX@avVc`REZBpa0SJ!k%$~{2z+W1lnO7EHmYG@}pOTqd%*4pbzzC9_$g5ND!31P5 z|NH;%zbS)rh@+DXkh>ft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Js_i7Nsb*(Uy4rP;v1@T7s6;mHD^ zNkGK>fECDQVE7Lf2YLbMcAf_yHIvse8Zfd=zQ-sp%Equ_0TYA61XiGW1_t&9Muuk% JY?FnU3;>TTI=lb? delta 204 zcmZ3$dWeNLEZBpa0SJ!k%$~_KQC+8=g$c-G{`ddie;o$r5Jx8&Ah#K$0w@NO0`VCp zGBDHtDHkASVqjrl1kwRO3<3#23{uAe#5q6=0;TaKsTJ|XnN_IH<# diff --git a/bgfx/shaders/dx9/chains/lcd-grid/vs_lcd-grid.bin b/bgfx/shaders/dx9/chains/lcd-grid/vs_lcd-grid.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nh z{r~shl)*W~(Mbl#T@I22iZKHz5T9Wp1H%F!6#>Ld3=qv3KsE?e05KB-3)n!ISPNK; z0VvAAFad}`0L=|R^~^xbA_8#S;WCDoKz`)l-@rPV Rhe@85l_6~b>tq8a6#z@gC$Rtk diff --git a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin index 60af0a98e738b53d73c8283f9314e006c0094027..d363289831a1bc4bd9a2be12f692a58789e07dc2 100644 GIT binary patch delta 285 zcmeyye1%0lEZBpa0SNqEXLvF*@R!DC=9R^lWu}(Lr)1_9GcmF z{r~shl)*W~(Mbl#T@I22iZKHz5T9Wp1H%F!6#>Ld3=qv3KsE?e05KB-3)n!ISPNK; z0VvAAFad}`0L=|R^~^xbA_8#S;WCDoKz`)`_e IFEOeB0ABw)C;$Ke delta 207 zcmcb@@{O4{EZBpa0SNqEXLvGARM)BB!3g9r|NH;%zYc?Qh@+DXklPGW0Tg2bQXoFV zLl-@rPV Rhe@85mEqOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhYU6vn^Yn=Dny3kYV^MN$NJ?b4xwSQWR6no1+Kk*28~3xab5AHafJ79S}> zW(Oaj@jFS2#Y+z7-|w9Js^}`ZPIH znnHcWs`gUV>Kon!;`yhRJ2Y)2S^8_5naO{NQe;`C$=Yk|BsK@e$4PiQisI;Q?CqZI zdF@WO<8}MjL2u->qQPVMz@X{xH<9g7Vgr}~ZYnY5%&cYXFji}IGWm)pQ^hr-b9z3B z%h}@H!bQp#OF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhDfHq)$ delta 153 zcmcb{{DLVaEZBpa0SFkIKRsk*;3|zT%SY0F+7>T0_Lw;05pS%k%1qiX2SpfK#c%>#UoAt diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhDfHq)$ delta 153 zcmcb{{DLVaEZBpa0SFkIKRsk*;3|zT%SY0F+7>T0_Lw;05pS%k%1qiX2SpfK#c%>#UoAt diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhDfVjUrcm4ydz zeG@x}9cJf!^M-lqyE#tAgE|=M^nPe~Q4p@>gaS~*aHQHv^dwA(BlDo!O{ zg_)22*fx58r`u$E5kgI~NRJFiSo%y&pICgR#2hUVf9tlD1pJ*qgJIH`&8EuDZs%bF pl!-x^^9nvwIQ#>)(z%}-8->gW*W?;y>T<@#D;KWd2~VvB@CA6LIxYYJ delta 153 zcmcb{{DLVaEZBpa0SFkIKRsk*;3|zT%SY0F+7>T0_MM405pS%k%1qiX2SpfK#c%`(Ib)o diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhDfVjUrcm4ydz zeG@x}9cJf!^M-lqyE#tAgE|=M^nPe~Q4p@>gaS~*aHQHv^dwA(BlDo!O{ zg_)22*fx58r`u$E5kgI~NRJFiSo%y&pICgR#2hUVf9tlD1pJ*qgJIH`&8EuDZs%bF pl!-x^^9nvwIQ#>)(z%}-8->gW*W?;y>T<@#D;KWd2~VvB@CA6LIxYYJ delta 153 zcmcb{{DLVaEZBpa0SFkIKRsk*;3|zT%SY0F+7>T0_MM405pS%k%1qiX2SpfK#c%`(Ib)o diff --git a/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin b/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nh z{r~shl)*W~(Mbl#T@I22iZKHz5T9Wp1H%F!6#>Ld3=qv3KsE?e05KB-3)n!ISPNK; z0VvAAFad}`0L=|R^~^xbA_8#OF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nh-;}{Q#L-Cx$XyPS1d1^ODG;AwA_Kz$AQb_`Obigs89+7&Q~)s(0}I$dm{*DSK=sT(%pwAD30Of%YDIi;W>u=e#1(;zY!iQNb828WplYe=*9d ivN4n`U}A8Y0Fq~5;B8=JSOwH~1*)DC!k=u%6afHW%t1l` delta 245 zcmeyuI*pY#EZBpa0SNBeSLQHHRM)AGU;^@(|NZ~>Ux&dt#L-Cx$ZZCx0E&U6KzxRY z3=B0u$_0p-7+4q>fph>6gFpfhgVeDAaSjlJKxuqQYDIi;W>u;IP%SeML-au8$}&^S z1B&vq7*;bgFi-sE$jCa`f^nPD0|tgC4a^Kr7O;U0WNctz2wlJmbO$2?R|8OI1M6f1 rCUv0V2qt+|R)(?#Objj)K=KR>ybX*Ds~T7tu0YjuLim&CFhu|Wba5`5 diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nh-;}{Q#L-Cx$XyPS1d1^ODG;AwA_Kz$AQb_`Obigs89+7&Q~)s(0}I$dm{*DSK=sT(%pwAD30Of%YDIi;W>u=e#1(;zY!iQNb828WplYe=*9d ivN4n`U}A8Y0Fq~5;B8=JSOwH~1*)DC!k=u%6afHW%t1l` delta 245 zcmeyuI*pY#EZBpa0SNBeSLQHHRM)AGU;^@(|NZ~>Ux&dt#L-Cx$ZZCx0E&U6KzxRY z3=B0u$_0p-7+4q>fph>6gFpfhgVeDAaSjlJKxuqQYDIi;W>u;IP%SeML-au8$}&^S z1B&vq7*;bgFi-sE$jCa`f^nPD0|tgC4a^Kr7O;U0WNctz2wlJmbO$2?R|8OI1M6f1 rCUv0V2qt+|R)(?#Objj)K=KR>ybX*Ds~T7tu0YjuLim&CFhu|Wba5`5 diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nh-;}{Q#L-Cx$XyPS1d1^ODG;AwA_Kz$AQb_`Obigs89+7&Q~)s(0}I$dm{*DSK=sT(%pwAD30Of%YDIi;W>u=e#1(;zY!iQNb828WplYe=*9d ivN4n`U}A8Y0Fq~5;B8=JSOwH~1*)DC!k=u%6afHW%t1l` delta 245 zcmeyuI*pY#EZBpa0SNBeSLQHHRM)AGU;^@(|NZ~>Ux&dt#L-Cx$ZZCx0E&U6KzxRY z3=B0u$_0p-7+4q>fph>6gFpfhgVeDAaSjlJKxuqQYDIi;W>u;IP%SeML-au8$}&^S z1B&vq7*;bgFi-sE$jCa`f^nPD0|tgC4a^Kr7O;U0WNctz2wlJmbO$2?R|8OI1M6f1 rCUv0V2qt+|R)(?#Objj)K=KR>ybX*Ds~T7tu0YjuLim&CFhu|Wba5`5 diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin index 44fedbcd87fb280fdf04b8a5831398a724e01ff3..6d9a5d006b23bcd524883c7b4d86f81cf03bf5e0 100644 GIT binary patch delta 225 zcmX@Xw2iqwEZBpa0SFkIKRsk(;4h8O%qxp8%SOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhzkt6o}6-k%3_Wkct3eCI*P+3?Lf>Du9@YfdyUx&dt#L-Cx$ZZCx0E&U6KzxRY z3=B0u$_0p-7+4q>fph>6gFpfhgVeDAaSjlJKxuqQYDIi;W>u;IP%SeML-au8$}&^S z1B&vq7*;bgFi-sE$jCa`f^nPD0|tgC4a^Kr7O;U0WN84JxPTSt4n_vn1_p*z4Xl$5 dn52POF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nh-;}{Q#L-Cx$XyPS1d1^ODG;AwA_Kz$AQb_`Obigs89+7&Q~)s(0}I$dm{*DSK=sT(%pwAD30Of%YDIi;W>u=e#1(;zY!iQNb828WplYe=*9d ivN4n`U}A8Y0Fq~5;B8=JSOwH~1*)DC!k=u%6afHW%t1l` delta 245 zcmeyuI*pY#EZBpa0SNBeSLQHHRM)AGU;^@(|NZ~>Ux&dt#L-Cx$ZZCx0E&U6KzxRY z3=B0u$_0p-7+4q>fph>6gFpfhgVeDAaSjlJKxuqQYDIi;W>u;IP%SeML-au8$}&^S z1B&vq7*;bgFi-sE$jCa`f^nPD0|tgC4a^Kr7O;U0WNctz2wlJmbO$2?R|8OI1M6f1 rCUv0V2qt+|R)(?#Objj)K=KR>ybX*Ds~T7tu0YjuLim&CFhu|Wba5`5 diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin index a67d73b0dfaa8e6b90cd5217948fcaccb879e244..1d461f0c026fea0e72acd5c3edc3f4101d595fdc 100644 GIT binary patch delta 323 zcmbQn`h`_JEZBpa0SNBeSLQG?@R!DC=9R^lWu}(Lr)1_9GcmF-;}{Q#L-Cx$XyPS1d1^ODG;AwA_Kz$AQb_`Obigs89+7&Q~)s(0}I$dm{*DSK=sT(%pwAD30Of%YDIi;W>u=e#1(;zY!iQNb828WplYe=*9d ivN4n`U}A8Y0Fq~5;B8=JSOwH~1*)DC!k=u%6afHW%t1l` delta 245 zcmeyuI*pY#EZBpa0SNBeSLQHHRM)AGU;^@(|NZ~>Ux&dt#L-Cx$ZZCx0E&U6KzxRY z3=B0u$_0p-7+4q>fph>6gFpfhgVeDAaSjlJKxuqQYDIi;W>u;IP%SeML-au8$}&^S z1B&vq7*;bgFi-sE$jCa`f^nPD0|tgC4a^Kr7O;U0WNctz2wlJmbO$2?R|8OI1M6f1 rCUv0V2qt+|R)(?#Objj)K=KR>ybX*Ds~T7tu0YjuLim&CFhu|Wba5`5 diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin index 33e357f842dbae3fe5319b789b6e125fc8f4333d..d1a689bc346eeeb6189ab0ff89ac3e46ce812bb2 100644 GIT binary patch delta 260 zcmaFIe1=6mEZBpa0SNqEXLvF*@R!DC=9R^lWu}(Lr)1_9GcmF z{r~shl)*W~(Mbl#T@I22iZKHz5T9Wp1H%F!6#>Ld3=qv3KsE?e05KB-3)n!ISPNK; z0VvAAFad}`0L=|R^~^xbA_8#B1H*#<|A86+t8OKy diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin index 5e0648c188ccd10858af416d5b78e253cf55816c..c9a4047e7c653014f2420bc7c21792d6038781c4 100644 GIT binary patch delta 371 zcmaFCdW_9DEZBpa0SJmMq@!6F*dv^R;)7g+nHX6Z7(v1e{H5`kd1disnW^RRDVe#& zOpI(3C5`IuFahP5|NZ~>--f|C#L-Cx$UO{F4-{hoQXoFVLa6uvnHO3Wn`bM!FWrvfq~&k z12e;u1wbu8#QcB_$Yx;p4;Bad3FvU12Ou?*xtUCC*@2Qw3=R`Oidh)=ffBD8*cnvd zVys}XRY0*6uox@QL?8kh1{9lI!z8cC&TwcU%mfaw>U%)di-D>`z@~D-#3mnMQUL&& Cl}u#- delta 270 zcmX@c_JUP1EZBpa0SJmMq@$S`*dv^R;)7g+nHX6n8XG0fU;@f8|NH;%zcGVzh@+DX zkUJlw8YspLq(FRzi3|)gfK&t!Gcm9*FaqfWAO?W~AZB7n3i!lIIGB9*Zyrnpq zn=y)!ZE_mpEzSoF3{M)E8J;YdoXKQj%LZgHF*r;BDr8|{;0H>+YG7kffs3(%#a02u wQov%YKxY9_0|Nt4Z1OE8c}+HkLknRhaDY|c1FBvOR2>2~l@lg5S&3N%0DxLGkN^Mx diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin index 780d19ef057e3872cc388df99a048491883fded7..d46c96d548c9a3d0a7cb5d3a430f435c19b99729 100644 GIT binary patch delta 282 zcmX@avVc`REZBpa0SJ!k%$~{2z+W1lnO7EHmYG@}pOTqd%*4pbzzC9_$g5ND!31P5 z|NH;%zbS)rh@+DXkh>ft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Js_i7Nsb*(Uy4rP;v1@T7s6;mHD^ zNkGK>fECDQVE7Lf2YLbMcAf_yHIvse8Zfd=zQ-sp%Equ_0TYA61XiGW1_t&9Muuk% JY?FnU3;>TTI=lb? delta 204 zcmZ3$dWeNLEZBpa0SJ!k%$~_KQC+8=g$c-G{`ddie;o$r5Jx8&Ah#K$0w@NO0`VCp zGBDHtDHkASVqjrl1kwRO3<3#23{uAe#5q6=0;TaKsTJ|XnN_IH<# diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin index 387f2fc6ec2a8cda0ddea4db005a315fe297829e..6a4b29d8582964b52f301b3fbd77107e27ec5872 100644 GIT binary patch delta 354 zcmeBUd&8z47VN>z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*ft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Jtwi7Nsb*(Uy)r`f>3@T7s6;mHD^ pNkGK>fECDQVE7Lf2YLbMcAf_yHIo-IN-(lb-o>a5B%d)F005@LH>Lmp delta 184 zcmeyuGL3~dEZBpa0SNBuT))CJQC+A01|yKi{O|w2|2hoLA&yQmKyEWg1yGC$NP+ka z6B!t4fRqamGcm9*fV2bvF$g38F-RQ?5a$3f2$aT`q*lZiXI7;e0@X4DF+>kUt}HXP wJfJ8)i(xf01M|dhj*P66Eg0uB3|H0J>f#0RR91 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 index 387f2fc6ec2a8cda0ddea4db005a315fe297829e..6a4b29d8582964b52f301b3fbd77107e27ec5872 100644 GIT binary patch delta 354 zcmeBUd&8z47VN>z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*ft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Jtwi7Nsb*(Uy)r`f>3@T7s6;mHD^ pNkGK>fECDQVE7Lf2YLbMcAf_yHIo-IN-(lb-o>a5B%d)F005@LH>Lmp delta 184 zcmeyuGL3~dEZBpa0SNBuT))CJQC+A01|yKi{O|w2|2hoLA&yQmKyEWg1yGC$NP+ka z6B!t4fRqamGcm9*fV2bvF$g38F-RQ?5a$3f2$aT`q*lZiXI7;e0@X4DF+>kUt}HXP wJfJ8)i(xf01M|dhj*P66Eg0uB3|H0J>f#0RR91 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 index 8aea6ea01f9f8c004abd06c94517f3bc6ade577f..14a0feb5440033ea70d61bbbea498e897edb1f95 100644 GIT binary patch delta 262 zcmbQn@`Xh`EZBpa0SNBuT))E1z+W1lnO7EHmYG@}pOTqd%*4pbzzC9_$g5K?!vth7 z|NH;%zbS)rh@+DXkh>ft2^3=nQXoFVL-=nHV6NGk|Omr~qOn1{Sb^FtHY} z7z0q0fnfp=g8-Tvfa;lnm_-EQ60m}j)Qb4x%&Jtwi7Nsb*(Uy)r`f>3@T7s6;mHD^ pNkGK>fECDQVE7Lf2YLbMcAf_yHIo-IN-(lb-o>a5B%d)F005@LH>Lmp delta 184 zcmeyuGL3~dEZBpa0SNBuT))CJQC+A01|yKi{O|w2|2hoLA&yQmKyEWg1yGC$NP+ka z6B!t4fRqamGcm9*fV2bvF$g38F-RQ?5a$3f2$aT`q*lZiXI7;e0@X4DF+>kUt}HXP wJfJ8)i(xf01M|dhj*P66Eg0uB3|H0J>f#0RR91 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 index 387f2fc6ec2a8cda0ddea4db005a315fe297829e..6a4b29d8582964b52f301b3fbd77107e27ec5872 100644 GIT binary patch delta 354 zcmeBUd&8z47VN>z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz*!czyxG4 z|NH;%za4{fh@+DXkb4>=2^3=iQXoFVLa&;!Iw46I-SVPdnu zVk{_P%fMm`3?MVN05J#v-Q|MpFrWrzAckm!C@4uRN>42TI~%CHB();GII}9%5Xc63 zC!i=li(&QZi62}U*(aMZ&eLpQV0hBN%A3Oe!vD~Gcf!Iiv#@(^eoQLd3=qv3KsE?e05KB-3)n!ISPNK; z0VvAAFad}`0L=|R^~^xbA_8#;kL Y*$fQ-!QwzSGchpmJOHVgT+3(*03m)c%K!iX delta 166 zcmbQhvWb~DEZBpa0SNqEXLvGARM)95VFdD+|NZ~>Ux&dt#L-Cx$ZZCx0E#gIDG;Aw zA_GGWka7WHCI%J;kd^=-27v@12B~8K;v66bfztSr)Qb4x%&Jrapju`ihUkIFm1U-u g2NdOJF|1~0V4nDG59b30h9?co3{MtJzRhR~02x;yD*ylh diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin index 387f2fc6ec2a8cda0ddea4db005a315fe297829e..6a4b29d8582964b52f301b3fbd77107e27ec5872 100644 GIT binary patch delta 354 zcmeBUd&8z47VN>z00hMr($UNe{H5`kd1disnW^RRDVe#&OpL4yj3DWWygKzF%s>Y7 zzyJUKn=&|uI6BDyxywP4KrxUMh|e&QfnfoViU49J28iYiAR7cKfS8Ga1#BQptOYE_ z02F0lm;l5efaV6EdS)PI5rMb_te_;dBEC4YD%D`(iaDkZ+kwd}CS_AL2GNB~3=R`Osu&o!fJXjrU;`Qt;j;pDT?6vJKuv-2Cm&++0RY94 BMqvN| delta 295 zcmaFE*2l&h7VN>z00hMr($P#4)phDGFadeY|Nj5`ufyOR;^-s;}gg1}>-xPr$ku7+8V2 St~IbSe1Vz* z{r~shl)*W~(Mbl#T@I22iZKHz5T9Wp1H%F!6#>Ld3=qv3KsE?e05KB-3)n!ISPNK; z0VvAAFad}`0L=|R^~^xbA_8# z{r~shl)*W~(Mbl#T@I22iZKHz5T9Wp1H%F!6#>Ld3=qv3KsE?e05KB-3)n!ISPNK; z0VvAAFad}`0L=|R^~^xbA_8#OF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhOF)*Mx0jPl)h=Cd>#vIdZU|@LCz|8Pu0nhs@-1Q#K;wN{~_p=z5d;v`O@a3&`~ z1Sg@;f8gXlaMP)qe?jnGtx2O@!pZs0_c-_7=PT~xkaw139$2oQ$C63~Sed`c5e!S}R;51A=k)QS^|OIX1hZIKIMTT4uYT}T)| zHF<=k!$4+zmK7pZHIA!#y?m&D=N84d2ZO$8tmG$m=n?|mE+E*eC=3Uv)|w_u6M|B$ zO3yyZn!S>ei~|cCPS_8Ez=j33MIR7BU$(eKC29YE5Lki1EDF$2za%?aSQPt?EQBxF zIWC6Xth5mOjU@ae05EG!5PEr$Eb>Y2wg^aZ?x-fI8= delta 476 zcmZ49&v>Ypaf1yLQ=`jfJEnWgjK-T~+3YMQTRAie7+6|!DJYcW7L+9x#Tyz}PCo50 zlL<(rIXbW#SZV_0G$(K16Q6vMYM_FuB#)j^7AH#%S^-XQRm+ zE`Ge4K!bBjbK;9qi{lL^+c-;2e&i(Nu3@NWpsxXQxS^q@CP;fuet7}d6$;7uIq`;u zCLlp5Q^8gtH?u+kp~px^L1S{Et0>U5UtE%efkuG5i(*@@tE9TIg02G4GMFUXN+V58 z9eBtAeYe(ChS7BLDOWup`4h-CnJng303_SpOn~GbHx~g@pc4x6%M~=BE}AUhZa2Br rg?}=?gQ%$)C{%$8;O3ix+@78j?^cwU?wp^KUxX}aX3bU0#l-*snJ;D}c}6C7v&|P7pBPNeSK}12Ftz4VP$Z~y=R delta 118 zcmcbee>{J~c}AwsrkgJ^J~5d5*O*Jl)S62{p(MAUEU_rw!c@UlL1Xd-Bbmu>jl_jD z^(rc>6ton|Qj?7}lFJfv;!P(fs)=vbGL~hW>}}%5s|l2ZYn{B#KRO~H&>jz*IW(&2ni`O diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/essl/chains/crt-geom/fs_gaussx.bin index d65593f24cec04494a4f53968c18a4c69f8b02f7..f860b6d7d910ccdaa5cd20cc6bed9021f141c010 100644 GIT binary patch literal 7428 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 bHn6H~cm91EZ10j?l42paQDW(Sj7G*^GU;h8 diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin index e0ad4c1f8d1a4c55d953a2e3c045ab4db3c541c5..4047001d33099fbdd4cd5c7bd5cbf898daadea00 100644 GIT binary patch literal 7428 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 literal 6428 zcmb`M&2Hm15Xap;72X%8P zC`$6k=1`lKLEuERH5~EB`D^s|=ih&O|JOf1e(mAUyWaQPY&$FReBJx5XMXYL{XW~} z$85Ve=Yx06=-)r|dau*sv{=u@^J4z|B3|>E7O&azWwyzmp0@I1-}}CDysz+loa@tO zQ#^j`@7If`O|cT&>FQ;f7wQ*LCwF;|Oij|n(3{1hSWOpe5ykyK`$8-?hcZPF+x;rT zs3Llohr+wF@Sw^&r~F`T}+t~fcK&USW)EQ;!SAUWcAb8s@#S&o-NNRG#2j7!5z zW0GX!r!;<=xZ|HrCvI1c$a;?)q(>P4q0YbD{Y^zF>igJ2$i z3uepP!(q&Gm{1Orw{wuRyyU<^0tXF>=w2m*%a&5t3p~qYDPHC;M@0^<&#E@4r1~b6 z7mSoa$VeFk4TfQBL@EjgkK9#qKA*WNkyN}TxagQdM>?HwN@+znnuP-#oKjP3QdU{r zw-6IP3>+N>j`qMAw%`o^0~~tKkf?#UvhCXy4%*UzuF@&x5SMSn(n&cwr4-h5tRS*< zMq%iT!q6Fc=!{!*#tfaq;lP#-m3oQFcuU7EK>s(&V+%ZN=dBXD65Mc z9EIJ}|L(g?mOWVZ4EZgSK>ZN9m|iBJsLyZ`-s+mzGc6 z+^cFJwB1xz7+E?Hh7N?G10FiMMF-nxGv!t9hpUUdAGd3%;44(dTRKKOv2;4&loE+> zY)kEeGvtz>9ip~ zC32R5?S>tt1CoP7yGHOm^PBKN;D8DO2g9&;9cVw&Vl(V49UmO3_u%puaL|@c+EF@C z`3%4s4Zt}KK-)&}dkqlAY=Cca8#*6DF$_j;?G1&DsQ- zvk5e98@1mi&|z!>9mXcWFf1M2vI+3WEo`24T2sN-E}H-cOFEr!Dw{yFHi71B0!_O{ z?Y9YZ7@I(cu?a8?52s}lXtzzEk_OHye_ZTW)t3&{bB3mhuhZm!vV=Z4u_AHM7`YFZ Y?*Qh@>~k@lf7&cJ1&)(QU;F*uzm}ddsQ>@~ diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_mipmap8.bin b/bgfx/shaders/essl/chains/crt-geom/fs_mipmap8.bin index 99a33cb2781b1ac26b6ca7a8728382a4b84e8292..3400d3c10a777532d3176e0a6faa05906922ad94 100644 GIT binary patch delta 504 zcmew|pK;n;#tFqta()|2`6U=lCbvqou`6gPl%*z{Ocs+YfU_q`_QKhkQZwM}Gg1ig z6zQdKaS@qLID3W6Bse?JU37AkYzYU{4vonN-9;w9lkI>jXq0P(vjydQ;OrIh2yqLA zsc`Wd3XO1fiXy`CUlo_L=v7o!ZJwhPAP@A|TStVWCpb03^~gETfwPY~FNd?sUADm4 zX0F@e>>sXk;p_!&%i!!l_l?M&5}T~zF$*qv(qkr^o$I*(q40vI$YfowDR9X%UMu13 z25*Ef6?_ne9rdXK`p3c75J(pJ&YW!KFTrRwxy?^!vZ9~pL;;CfE-nTD0w
m+{Md#tFqtHU1k*`6U>QC$~zpaqCr7Rw-yHl%*ycPZp9aK;d^v_M-4*rDpIT zsn?kNz*%haWvMb0MFG-FQTTtPJ5l&OGLumFs~>$VbYxqVS)}^`P)8dIt6->S zV9lif1tqx!Wr;=ch9>4|MNFS3CUHt?=XC2;*&a zOzXEs|1&vC%59N1`(@f5e#rS4mkWt>pQ}vJOf8kZ)G7&R6R#9MVMq zhqy^kcU4s{=k|V+XH{Lojt5KY;3w!B`pcui53`ihn)dTt-8 zdLVQ^B=JJ;ga+DPB@ucLeZof~B*>LfM7&1c5p|j8cVwpr z?m@@kM=c*E9TS5wDq|19>F|)#-JvniKBGP`6YdfVoS?faV5TJcRD%)rD!r)&(-kT( zLU;*gM!e2?z|6c37?H#U7)DVt-=I+wWDv{*0yS+dZD}sN%85}0F)@+m4;na55JjF3 zUp3UgJG$@COrR|1gCb&Y~hk4v#mdDgN3_-rH=?79DVVdsAKAkznc1BG?eCqI`3LTn=xuJ0$%uupO zwfw~`$ixML+s^py!G~wqjt-qhdLJ^n&1|9K#Lmy delta 504 zcmX>o@P~WCJf=w2jSE;9IgJ&P3o`PH;|(WYWEP!#h|x?gC%?Qvp)57oSfM1hpe(T{ z-q@N;0nVO$i%BC?ucER_N1-%6Jux>oQLmz+LKCC}L!$|jMiT{Fg@XKY1r4a7Mi^#H z=4TOOG?{#WRcvwx6YpdnmP}qVBm>MQA7P0!Hb)XMhZ&iilbBloH`!E2!9dSI2j*h4 z$sw%z@)k(?EP(pZv`k*gY8Yn;Qj?jcpaFBEg@O&-6irQqYM?YcAS{7~K)nKXQ>{X3 zPH`%x8kkw;ldakG7%e7e14*;Vv)S}HOcb=h!94jgn-Ytqrluw^22}j?%7F$O>KP!p s*U$hIRxr=P3^Z2IhDDvG4%i?K4WK@K4S2MGjFjV$VF#L3%f-b20E7~np#T5? diff --git a/bgfx/shaders/essl/chains/hlsl/fs_scanline.bin b/bgfx/shaders/essl/chains/hlsl/fs_scanline.bin index 7dc2ad1da8287185c420f12409f6c864f517e957..2212e74858db57d4ad247021a08b67ef5903aef1 100644 GIT binary patch delta 640 zcmca4aa4@gE!cybvH8$m=|@`47_<&dH68+cwuRWiZO+;%_1cWR*{*epaBFxwF(Lv$SVG^h&dtg z^(qx?6b$qXG=VBL6>4fw6zf$e*eMtSB{5_sd$F1_8cuFt4PrE&e1TJ1&;;Zx5P&+< zWb%Jj|Hu$xVeXXl)}oZXetV)9#d8z8C0p~Pnn)B$yqg*DgY zj~wEYyV><8FXS+q{Dxh8@@o#Y$(kI>8A!@3VP2_)F@lp5^PE8e91pS|IXHpArwudS zToZ?S4J7@OXK@Cp8o(4n9cE|%G`2W1PXk4zAXhG<(d2qAdtL)XFc<>kn5%`+Y;pj% tIHT$03~m`7q(CyAJb~L$zz||Q%y7fW54k~+CC;PI1C|2%tCow40RT`$y>$Qp delta 860 zcmZ`%L2DCH5YBEkyU9z^_Tp-^;zP0Sn!4S$Nt%S1id01?^w1m?!xA@bpv{&|nkLYq zP_G`s{0qU8;K75pUOk9M5%UkE2hYyi&2H0z!@|y+`DW&u@4Zv?`?c(|#`CmrayE&f z&5g6``rJXY*YX^vi$8nU5rtR`KeYKM;kMg7r$4sU@ykErHv*f&XNgz9ig+vSmj(#1 zMfxc%+QOTi&i2ke9XKtEwp`bH-Lz_ihAypBZP4sHLqBEG2h=o5`X#`$jNYda4WFMe z9Q_ZPkNUL3YMd0h`SV5r+pyEFd+1Xw(*EB5!1kI2P9^k_EHdpMc#idiYCTSSIa~xj z#INUkbf--*X)il$vs#O#%qz{vXnkyJ1?4PHYWvn=xU69rJ zB34E;gK0tq8uA((DvR(@w%}B`3V-D#5R-Q@6)s4iQx!IpW%!jO@K$*$G82BwD*RNI zxO-E%ot=SVge7m(`Ka(hP?CJusp4NL-=@*ByX*do@v+*>8Qv$i?y^g3GlngDovwBP zDW&#=0(hxMS$4iHWAHWgE?4Gv5SWgtL{hE73$mCg%?3`$;|2fWMk+H4evp!20ZFf9 M{M2!c91{}z2jeUG82|tP diff --git a/bgfx/shaders/essl/chains/misc/vs_resize_blit.bin b/bgfx/shaders/essl/chains/misc/vs_resize_blit.bin new file mode 100644 index 0000000000000000000000000000000000000000..11b96a1ecab08456449f6d96dedccef6f5fe4380 GIT binary patch literal 548 zcmZuu%WA_g5L7}=D*cB&+I<+s&CT@QW1!HhP;AFhi7lf@j@{BzzqHUV=ofTl;#ejT z0*Rg7+1c5**OwcDXZHQ~GbhyYM&`%0R_}`$Aq$6)Tgy$}@{O`pc3^Xis3LZRg-(&(|kU5DrF-aCfHedA#XdV&GYYsaWW3%4vDTdHqn^g(2Ku Q2Azn()?VPS!7ob5KLK&FS^xk5 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin index 4a8d4e1ec979e7565163cada0a7b243582db1292..e910c2e41031d78fbebaefaf9fb3e8220955c390 100644 GIT binary patch delta 690 zcmZ`%Jxjw-6g5#13R10u1gbtK6Rk06(=TkAG|^R1+*Cp>trQwlYHd?N>Q>yu3%aMeA#k=aOJDhudDmT6W6 zUb8Zz0ILbm)kC0a2SH`%A_X3_1ttbBS~?gXV&X8ZN5^OmF!e1$3jtm2(~4Cqo>*Q& zL7*+(?qJ{K_AoJzqpb0MZskit_eKg%1viwWExi);cG)F;c|1aRo{D)o!vK+hx!hqJ z-4OpBgRGLjyO6*<-%Wn1xF8HHEauHdV|g)sRf8l&hmR9}=qkXqpz5f15?43U)YL(^*8mhy zV2^-Z1b3$Cww}&_T;zprufrnwg$aQXFrjsi3W( zF*)Brf*&YamYQs$kzAIT6K|@yd6t1HBa2=|W!2>UhJKAHXnXoWMXF2hN|9qVLd0=&}zn z57*0kN%>xiCQv}a0Lh$?6!n?s9*X|_$M5gn|NHkp6S#hu{PeWCS?_l1@4uT&;2&J? zo>q^W%;5z?xuR)d@dSs}ef@AX&B{vX3Yx=k zpZ5F1*Q@E%-S&Ea*wHv)J_EI%)9Eh{>)rkB=AeG7aB^^m{q}3MTW{~GdN%!YTG5CP zPrFrn1^>Ig-LD_3$K5^5a0L^p`roTxtGaFGA8YpP&2cvKZQ$utY^Yf$-Mm7#c{3N< z(GPXGXy(-~v6I4K=;o{A%J}yFC$tO?+Z@A!aZ*MMlpCedYxcKGo1Wmh1&@M8dq1x)rV(IvalG7`m};hC3_s1yTH6gknB<7?*` zrXUKaID;N4{c>@ZE<93|N8HWeZzsy_Tw;EMYq)Y-bU=92w#|?RkruBjpl;DNz`9i> z*ey3ot0Qje9VbBs!m-$A1FZvcYAu+fcVd5&V{RmKn#c&y+cu$YB=uLgGSs<`Tk@=| z7$6dLTcVEk^`u;pIyX~G&cRL`FPSVON9uSlL7f|-UF4`Q66!dSF{s;w`a)7a!j+-U zz21_q6Y5j}>Pu6guF&B?O3h2u6?c{*6JaMt9b_LC897j=dvWSY1Qb+H=r3!wQj$7N zWDM#{NnI&Uo$C0YkSlI^l?z7@X{qZH^cat-n2(AZOZ5qWVvFIYLk52pwe( zUGpT>xg-TqLLVziRg$GzWNDKx>Y5u~=b{uu5B;(ZQI+ffbqrBm3{lM;rTY-2-eF{r z1MXA~xJeecxfygWL_rj|X(A)6ah-&y79rZ4s(HUz*64Fsnc9|CrslrYU{Pp{omdS9 zIiljl1LTMbWr2#@OLv(X45CDZ6B(d7vx7cupikR5-3nRsiqY< zc3N&Q-~JWP@Z2>j!x}`-rY==fgWd(^Mi-fLFB-5NF{j?)!vr}nPvyXzWWk&-aAR}K zAu{<3pTUWYz}%>WxfRUw71eP28uF=J-ykCM($>MCTRrox$ef$WkZ-UPs}&$e=DY-e z9GRmmmB^O^Yn>$x=v^NurzRh4}kwA}AD z7oH&ELN6VBShTlav&+&#cidI34^iqJpo1J2I2XsN=SBeTq`=2)$3yR1VNd=GDdV6m_{21yMpD zD@9$BqE4hJRK)BVpW}{qxflfzp_k65U5rszj8VsJ<@y+<-Vu5qqp2LB4`S2_OXOnI zB{5198DXWnBu1Tx(Qtk(&+#b`P@r0Vb_ko3V(I56Vuf9^lbx{r4z43N0)NbZSPFwl{aT*e8$k{Rd7J;{nqt0d+ S81SS2PNMVg;(tx2lm7r=`|n!- literal 3645 zcmcJS+isgc5Qb^1s*qAkC{mJPcKq#n`2XSl+t-^9zkmL+@OoptJBF($Nut-UEDL||x;ci2xCr;_ zDt6D&xBEI;r^u{7?=9;TW#xLiVyE~aV5jgQjhD;)VnBwyi@1mBSne)Ov&Y5YxLq&P zERl5@o=&u7I^Wqx$!-&8-WMj|@DtMYBTJ(7mT`OVeZcC9KHDFY5El5~a+5{}c1U(e z7$OjB|7M>V2gm)ywY@uqZPz(i!&8aAw#au%T;@9NMXabx-Oe1BeN>A)QASYIH+N~y zIPT_f%wk06f_=pJ`9#=IE%j~NDavZZnp1I#qOh^DI&9C$^SnbDXhZ=)890)1`UIuK z9bU!7gJCptVB@{#u&b)-p6*!V9uwT-hI`Tr_t=EHEXywUMB|?fT+za=_guCvW zPM=IQ?kT}NZMcJ8xTnu^i|+1V&ot~Afjw)m{a&zV2H0eG&o%5hfjw`qyGaUv0kr zmOCidME|;q0{qY3b&mqw*}$WSJ=tpgbQ*XD_Crl6ZHP_BzXLEevhfsyUD5BWu->%I$=@nTS*_cJhnk@M1>u3Ilq z-itwj-p`B%2IlKIbgS$33zYw2P@q3G1S^exfiM~vupEn(mIrE@2Hk>T?&RoNIQ473 zj6oc?F)X};OG+HK@il_W7X+!;xC)1KE(Mfx5ftOFd|bkn~7?XB4uOH)f9v7`v8V9lLP_cIB@<`^d0&LUG^d7 z;d*p0Dc?&m1Pa&~Af98AratrBLs6gp`2F3F|Ni~Y46pBIKRm22H{0#z+izww{KMz7xhnuU5-G0mCg!xR=aZZO%?l#-o>+`+&t)j`{8+KP;s_o|LrmE*Bf1Xr4 z;@!h`-G0FTF0OZ*`|5ssiy5vlp=x|z{aV#+v-qVJ*WSF$=R+G@orw*t=wzE`bXznF zrM(P8oh_S1^>gfGXc+$T_4B$L+7ExxGF)u)9KOiLK28kk=!;^{Fn!ky-!u_lg-Ab3 zXzs;$zIj3`T&~idUxvPM^x-4o2Ccr`JykXM-#_fn0lOyJ@2mRo8&;>Wr=8E=$M=2? z2ytDQ<_WI}(OyiV&k*hDI_tB(Ky*2b0TfG2_D!NI@kOghlzN71UPYo>3`9wkL|cik zU1XR-R8VOKBUFBK`X*gmQk6&C&+*xTa=Xx&U-6o*+?E^=F12klq#^R+^##-|*#@jz zQ-a+}qqOW4>Lh*y$YBZdpmA=t3CLMi%*i{kVV7gxY34kUBS3H4gnFl`zu=XjE`8jx zk#)s@$kbhlI@xys=!?{)nOb%eb&}NCP#HN=r|(kKr6Jm7j`}j8P7^r>b(c_IYUk8BjIUJzN#DPc$3Rdhz#A7pp(OgMO%zeBYkDY5H+$sK#tH8 zIYK8{LbozWZ7xY6YUsy`Qj=t6Wg|FodWW@RWhDgjyTZfL^Ixz2x%%zz+HWPIc zwE}WvE=vI9$ed)wTp41OV~)gB%xNOWVD1yK4>>SrSu%GrA)U=Ihp3qIM2^7REi`jy6>~c4nCy|Aw7X-w zC(POGb?I)<#Y}X?OmxyzZp=jP9pR3dn97m)Bom!9gv(_jM9n;(iT}TzyDnkgOXgTr z*}Fj}{qAz%36U0h>EOeWy@xfsDlK#`UFF9R<=z20NYG0Mdp@S9FQ%xMw(?_&a_w%#mf}+ zxfF${p&u(neUhSHr6?+5_KeR<$NOB2LL}&=^JyPr)E8saOI!IdM!9!{KE`M&N9dCn z^~w^t81+ev@@J2tpzo1}w{vA9@tMLyyp9&({-l zM2a$9jT1J23g{?ijA3B#B*g39;v(Fy ztJpn9-|p*ZJw?v?^WL&fQC60(J@?(s;StF9u}TyNG)@9n;;VY4*4n9JlLb znk6z%!_$ejOy`k(l~10(;(Id%a-K4Y0}L z23_C4CBQLQ>&Y!w%6h4HFIN(94WQe~ZUt6-;T54h>ntHsoniyw9L>%EsO^K;zS?~K zD|b+?iT-sJ1^A!6>mCKVvw=qud$QE}sWk8m$mvqk?G-40#h|dRejaV`4amu78+6MB z%5yO&$otV!Ffd(OOhGqYpj;P&g1jI10wddPAM%Sr*L@c#^k$mGiw+PlMHgt+zCNLI|8&glw?Z^=IQb-d4!zv zcXKPI7sN;lhNW(j#p?RHepd0*ufM$g^Y8D!PVjj%`Sw^I*L79xC*Mr;A3kr-<*B-q z$IY#pz3FHF`ff6LUe(vl{*gUbYsH?+?bG^DJvE%M7#$I~29`e_4)vG!)AN4w zaHx0exY|8!t6KcTI#-5c=0?OFm^*B~u-$62XGuE!W6HEIk{!>x5?(O&usy6!?6iA= zLnZFc`rqsWOL#VWmk@K=B~A4?upzn=CAmoIi}bCB+%GLCZ@;yj0m0e&WufxeMm*lP(g2 zfpt08=i$pNu3rWFv5SBjPHr#HiRC;H6BxC9e|0cmB^(9Sd0G&^3iyT1bvoA-wo=mV zCHT`X(X7jC6}^U}3r>+;uD8ZZnKXdfb<6C6`F?QKZZ&j=y`Nn!mlVN+IoI9wV!ZZq zYCq51_OI8gy-OElTBoE9UUzf`U{?btFBQwBXSnxUBSA1qJbf*NYN5Q`g z;P3G@KLT-I`s2=LH1HU`BJ$kmOdDCw9kIux4t{bkve~eG#1PnZ$&EDWZyyKFhx5Ce zQEB2KZPJFLkl-Q;3YhWc03Rh8Ms60j+s)1bPGyk0bP$to)s|TM={bP?h_<83aZ7taHR!w)})2>r-hLSR zpZFq9S}fwE#Uj9BIg+TQCoNuHUhK3GRIvrr4bdEz2beT0{3wKxxpgVH4~3XnD8#7Z zYP8LVLhvXk1doCOX1r-31Vw?7TcO-2sAda@n~g&2pMF{>Z(0Z=b6}yoETqlC=vr3+ zG~(uEq2jPmaagDTi}{Gf+{psGP?Omap`tCIZZ-=ofM5|oVPp;{bh$}-fT4gAxqV|= zt%*k4yeNt|D2g~JiU0~-WA@dtKozQQ`LFWWhk|OhfVkNxwEpR|n0wPg8kt*{vZ+ZO z#jIFbEF>-8WFu}q77`7b>HhvtYp4B-!UATz5+!xX*|WgN&BEDANGjSA>SnRPq+t<2 zVPpI-ejX~UKBD83K<8544}{z=YRr5sWUCyD5z#jh?|W<>z_`G z+@BUk=D?yUOI)Xat#5yR6$+Woeo)td_U+cHkWEthdn1X^x2YPm6b1qwwqTe(_pOg3pzc+*0) zEw}Qv+{$jb6)oRXxaC%HT5c7m<%SvW(?X3}Zj9V4oCU3-qODvlHzo~>0E)KdR^FCd z*)6xC)td^p+$v7Xt>U!YFylutYPprW6F(vX@T=kNLJ-&AR6^G^aaZ^_67tt)G`_4{8mV@E;>(64lT<=7Zj{h7BvlbAC)3(4>2ywsJFOTB5 zeZ&P7IJ;>77k46&+2mb9!e!?)HRoUq)tm_AA}|-3FO!F=Tpr8n(;v&-uU}5f4Gy=r za$~PgCfVdh;9Hue;wLxcUxky2IwUUUM&Mg2Zb@EJJi`y@tx}U!>gjnuhadLl+Pe@xHyO~~$@S$qiJTAQ1cUl(e{nJ}%0Lz@YO{tU!M$`mRVD76 zq}e(+eS1e~cD`KQ?2x#`*Y^Y28OPg$i-KbZKA%%e3NwvaBpW}c@$)Pk|8lwb zyKhD^JqvK1VdT4J<#vDDy}K&r4(gnPI`g0|$W)6#sPiaL=idX>(H+S8oX`4#W_|IJ ztV>!tauUcp4w}R#wKK-O6F3eE9S4OTKr!v1 zn7#-F)qRONhS}`@%;2Ca3*gJbN*bnY#REaMbJh76>UIu^H|`ZWx=BWD|4#?Tvr+>3y?kv+P%S$ ze>Q=mpa2yG1%_dNEue20u_+CfMHmIuYzTRE9CT%ovtSe~p8d#Q=)hX~UdTDDb^D(C!VKws8staqKq4 z@!J@NN6~ZK5VqV53QaXzhb%V^y0VzDWua@!ty#;heao$B`=*C2w~k}EbsWo$VOSQr zXSwkxEK$LRR#VZ|AmD zThSfCzUn>|E?(*}3(l7EES>zyi+l1cPj#T54tdU;T%HWJO`w7x3aFr#i;DpOY;&Y( delta 886 zcmZ2Jm2v$H#tFqt+r2lIeiP%?tEj9}&{8N%O*WofBwm2Re<|LJ!mpK>fx?%OM3vtl zxfDe{MyeBq|3+#O3cpnvRbEtPE{gn4nN}3Ot85PnpV3Wt@@v^56tRs!v2wX4WU)!| zjmX@|9rA4`d{Kqa&3OtlWf_epbJ(H!aJgMGic&-SIVk)q_RCTDO%7X7_!}g}CxlSaP`FN(^)g`rGXlLtCl@J5 wFdLefPmc4F3qUp80%kbeM;7QtBgvro#{{GqCF zjie2*&%Uj-*XI8Fw>LjO{Cc+Vy0Kn2QIphZdazzt?1z`#M8_Xhga3LkzU{OzI#%bj zeyRQ68%J?@Eb_M7rNi+%<2dQsD$9nmS6#G^%Q7A;zi%w-6xR>=VGpM?@!=G;X@6H$ z^=@l-hdit55*k(}t^Kc{x}QE%Fosi18Gz9chjRT`!@2GvApLXBVQuYGmG7X8^8+}p z{bU2f6hOini|AIpx8)HrM?N#CXZQjLyzS}~VLHP|W(FfJ3&@HpZXxQU1$$$643)f+ zUe;Ksyn#_8AU(RONLe@_4^zfR!^km6_t3}}k~4Zy;*D(m1B+GJWj}#3EDhf!`r$yp z837ma9KoKc=y1%yiX}rlD@=5ifwfU_tr*~uvd6VzU~H5OaHGk<#>lssU|>T=4Dj-1 zJT>W}p5{PmLSx-L%<6J69fjf$d5o}R91CMx`GwQoDxHWsx71-3qteLAp11xYQx6!XcHo*vAj654? z#gv~F{n(caPn>qud58toGlzPCv}n=^FAa8qBjF^70pbWJT7z4iHehqaYYyW6KYw5N zBZYcgVlWp*-k?O?5EB@awqrJ;zo94qtv?!$W{f*a`Imq{F!`WP=7UN^Sxl|JW7J$u zx>9>AvM3%`YLovq%Uu@c(K4D}2fChEXEcuXSv0aQqWe1D-&I9bD`_fPmMC~h7E-Bt LTcc(!wr%|Zv+GP` delta 519 zcmeC@U(G#X9uo)a#03u-jVCuT`bn0hCL1f1w&2Ew^h$%1A`B4$9X8j~Gag(p|B*czK7$(X}jkerj4TL5>6sg8nyo`DX`bhF9t zShVCVkn~vq^`U8*Y{jY*X9-f1nWmrt^OA*v4crt>O@(TpG(2c55k3ODsa7F1r#KZ; z4a_X_$){QM7%e9M29jozwb}H!Ocb;fKmo6zFCkL_%^Fzbm5NK#E7Z(EnONgFT diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_scanline.bin b/bgfx/shaders/glsl/chains/hlsl/fs_scanline.bin index 25d4203966137b028c5566acc3e277c9cb4206e7..5c118f422dfc36c3e4eae719b886783508cd727d 100644 GIT binary patch delta 674 zcmdlYzEhOfE!cybvH8$m=|@`43YD=j2AlNt^wcY#7Z<6iRXn$`Xs>jjXv8 z;A{n3g_6{YlG377BNqjY;&>oON1+TvCFkcCr5H?3WRa=|>&Q$~&;SCUUIhgWBo%rU z3N{J`dIp*xnVK2}Oa+w)1)3lgXu9nb41u~aWhxb*GLv7iXfqm47Gw3%HU_yJ1k!Ty z6H8#eFoB6eeP{yomB!?COcIlqvg%H*U=^MGoHcp!B~~#(4Ff$ROG^bUm`CJV9q0?7n+8z9-hp~Pnn z3QtHdTUc{Vj^hxY%)+iYnUBM0ay+~E;@$93?y|f$o5s zV6F-CS8#G-o--&u;=$@Qkoc3?IeoMYU<#o+4Gn=T(FxCVH3OuAtC!gn%;Xw)<)5+htYy=D;HpA>Sob1eP U3XH2tZhaoGRIN2vEf*I90Cn+a delta 928 zcmZ`&%Wl(95RFaZBqk{!L;`}vKt*NOt?_kZ;;1RF6jZ4Xsp_T+B+CRxs+7biPNP^f zR25$k<_loK8VNRR_y&Feq^=NRgIK_Z1@}6(APua(GYnE1EP|#Q@?U_k4CWyo8}Lzw{{NuLzkLot ziW(`?Mic%~r-9R~K)>^3VE3#g#v(dXo|I&Nzvt+yAbE`OLUf0K!#&$`8gAR|S%hH| zE%sUa`lxGvcWZWl(^I4YQgI`*czeC!~^y>J75HMns&Dld}aYwO1xtsw{e|BOv6gT*5&PW zr4z_euEQWO{8viE4c$fTSyn<~Yo$r3jG9d4+HL}3#g(`aSKtJUQ_?tK zMN0HO&zm=sr^km2MrZc%{WWLYN~fyhTI0)N#@NCWc4?)lTDd{nlm{^?&aPP&dg+KFgcRhl*35DRw3Td(qQv6W>!XFBOL_;Jp&z(2#~1@l9;@X#ZM4b X9H?aS1{U?nCakJLs4`#;*{n(cm+ls$ delta 101 zcmeC>?&aPP&dg+CIXRNql*3TLRw3Td!gBL8W>!XFLmdSJJp&z}h$WDz3zC?;j>S(9 YRUD{f@&*?5$tJ9-LZ~ue4cV+p0G-JeyZ`_I diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin index bf5015ba647ed74b1f59965389a17de05171d27d..51ceac9626605f69c50ebb130d8838b580f1302c 100644 GIT binary patch literal 15947 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 b(kMEr{(!gnwyOo-(85cHhld9TKlJ_wgHDb@ literal 15906 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 diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom.bin index 8da81640e8ac82d739975d3dd26dea58466e8650..d5f64af3b8229b84ae4067d3308e33940439818f 100644 GIT binary patch literal 12619 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 V!p+~^ddXX;xS)J|d~|d(_#cH8)@}d* literal 12613 zcmc&)%Z}W}6`kG$_SgaJi8t91Fc9=uGZa~T+lmmxft`(kKsJztAapq0J)?&EG46+F zMuLHSLOvm%kWa`b-lv3;o!#~2dr;Zf1|0I>R&9%&9{3SJGGs*gUQL@ z-$%Ne!IP80(LjIytlV5r$J>*^KTYL3tM8}l&A42i4E|w?j>oI@5{0uD)04pmrs4ah zaIso#pPvjoQ~d7cdbJ&C(%+c&?@8I!dUZp}KbX=FtSnq=8T_ddVmF#Cx6}3Y z$>6$TvKxK3D<`ALY_UOiO(~2i{e_UNVqIQO*R=3xvt3V@SM2uBrtYJH&gn)DZMHei}GafcT@cCc(?w(WJf21pklD2heV

{PFSeZZlh6dCPJ!-CURBsVA*IJ3fY0cH^x#`f|RyDCfs7k3Bq>^HsTx zJxl!0`pd&sdF>Xbyf%$fTBD;|s`0U}TqDG(tuW#g*50i=-(PF_-XW;mI>xuKLiMhUFiMr2@e`uU}J1@6iZRcN=v*l>D+qzD@xVpR@eX%aD zephbGzUQLmOo;^GB#;YZMf{BTkUwNa&c0SsH>|%F$2~*GvXC6dhGEkF85=@UhC&WQ* z2=D+8?%#Tky}(aSrOiwEYqt*LBmvXma5!7~mgmlO@=-&!J@q~@=Jj>R__uc~ zlO_fd{)znkyY+qyWV5z+v!^WiWytYJf1-%`J0MEKJPB2nSPK9&=yK#y@c zMR%usyoX-JjP9ddjDOCDMvHS}8PiS6j$mNuEV5qX(11>3G?m|#!+Kj4Xr)biKQ)OI z?XO*)gkoL1h}_T*TFix<5>?~{6(@NgVFtn>T_|=&M`;gLOm^DkAUGpfkVP7YCn}RZ z__7_YB61zJ1Sw9vbIRTI66kw+PXqQ|ZnmF(x+rgl<;A877WfVPOIR79m&7T3T=<1N zS)4^#oIKW-h={`DHyHu*c{uqt0_#rBxYzayhw$9U~P3s`zm?JlDVMk;RJ2-Ntf%F- z4Kp48WLf6`{%~!v&wL?dc8umWBcnb+8)u99;`6ScY~2!;MUBAxw5$_4M$#hy%=cjcRzbvZku3!Jd>`6UW@j3}ra1v@Fpy!b z7iC~yWJTp#;DG&^7jVE#CMmUUPf)vX)sT*|C`gMejlw)i3WEB6DZ6;h;~KB%jRB#L&u8-~)}L628$i@?6w3Y{*G619>EhwJtje*K zO)NB%=cZA@XxMD0*VUqhMD#S+amLuKGMoj2*7W8P%ckfY6mEj3SdlZOg!s zX6KgfuY$JrQ6zgI@Ce!-43{Y1CqCF6zPN?v^u@{$f~a^11Sg?viRv%xgF`+Umbi0{d7I1V72G8OfI-8(z~X@%RfsQ} zJHKC-eHH#Sdn5|Oo?kZm7jMK~M{~ozz*118SNO8o-!uz(f{mJ6UVjShYwn1A!<}C?cYeRNQ%#UI>@&>S#p(!bhy5El zm7!!q647bc^UIe0Ejd*sIS0~8AHADg-#sv4MVBMD#Msm8A=K9q^tA(`hSsq7=xS8B zXj0gqvO1QX+&kHBq(~Mm!ZDHEYnv&r&A>3&zU}GBYK&Z@uwb$}vgkDv0YRl9&XV4q zhN&b$!wAqBT-!7ROi)CV7!_-HN2j zjePxLuvr3#tsJLx1aWNjR?(0a^|=WWJ(bZ|NDF0&2peUAEUr4Dz1l|957zkqU?GdG zFyj$ljR$C|RfTLVRk0_5b>thUN-yWti4PW#X1$fCNfhTf_J+f(NX<@M1qaAsbuY$p ze9{r)rvpQ-kDBx`jhu&4oytswIl`5|f=_e3D(T2~7$S1pFw8?ML{;LicQ5*9GhY|RJQ z5-WSzvXX4^ZrCDF^wo+emK|!7&R@f37zT`X`U7I5;I&r_R#FVS8!<3exXK}+Xs+gi zHbcJH%axU4vjq7D4=5!awr!Re2LqnuPn!XBd)cy5Y?fFK25#8}PL$1Ah8RslP&U;B zie}~=xl4rRNXrDHeR?h%3_%#^C(hy`i*a`+NTR%m15EIk)OdI)mpAmij4Y51Uc9I^ zWYy7QU&=K*7y5X!odpZIA7EcKt=ARZD`RJXpDY0DTMBiD)~#IkT10csjl~V7cy7oS zk)#RUp;AdAr>hDg`8PP7=5HNnS|^87qpDr(jQH?~!qk9+3_QZUI!+(7v#L8Nook|c zKB_ycE3I3inCWqP0e)sK6;)$ht4($9lyk8mcIWCHm-n@lYM#q4LogpDcv| ztJ9HMGEM$S&%7gEA;6Ay6d-E{ILC<4MWC`QC}3jQrmo;ZEAY`9oAuUhv*YO;IJ~S0 z*ru{q*G>j@8WZ+y_6Db9z-MpAZ@krtyQF^W3UaeJBWN@nbv)qC?{2;1{Zm{`K0ZD= Hx*q%&FaOmE diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin index 42ed26c98fbbbb660aea4a70ee5ec0a5eac30ae2..bbed407f9880a7dd05e3ee51df9a4d0795294335 100644 GIT binary patch literal 4171 zcmc&%Uu)Yi5O*HRz#XjX!=43$VXvO+xY?SKHVihpz4WPj3qdH3oEiM5*mC2h>^tlu z>~Y^_AE`S@ZXz4T#srf{Y;-!GevEQl; zz~!y@Gi_L1(w%s}=GwSQHZ(XK99UBMQH@t5%g7;grDRW7JrJh&w2v(Idbu!Bz&7I{EcMDjcjcQ zAkqu`TQ1fCe_{~)Mi>0ZAo#T|_}AvZhkm1r{*6iW+Fn04iJp7TKaM~b9*06G7$Q*ZNB{~l1l`wUAYgt|$Tf){60Rxan#==<+!S(c#^*(d zN$|W>bJ5YCsIyb1@hm5bc%8zl&v*zAgVQlEUhg#9l1_3XRGWUU-ai-6HL5kpT80iF z)Fm58TgISkvJF%^#-MY$!H{0T1$P-)x*hi;AVRp9h^C}zzkw)G`?ox7RKcb%SoZ`x wEq1>N;i}P>^v!^mcswYSyNU=ESObrk?MtZ0FexeA`f`3ZgB!4ITh=@47n-^tlu z>~Y_+yOZ3+HjKhFnZ%&e>GbpIes`zK>#sYne*gUCz_aZi>td#u5VQpk^6a@bt$UPj^+6N=T#>Yn>jZ*I2Y(N{&ai_gvab;Py``y{(pW2)R6U%Ic=aaq&-wW8>kF<56yxNR7fxeH3j2t zQ-*Ys!FU7yK+C6|R&Am+gnfH_hdgKtR(-*;C%`tPyC$H0D_8>iI?DmUT!Wni-bzMZ qFCngbNzEc?c4_ar0bQ=T&v*=|rLAe*LO|!8VSfy_5Z85_kIo;x2Zite diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin index 116f974c38fae4db35f96b051f1605480ec820e8..c525c38c3791b787f40318464974ae3b961d065e 100644 GIT binary patch literal 4171 zcmc&%-EPw`6izQDqzs9%3$868p@ao5%?j((twI6~Zgw^9s>*Uxr$oxnlsIeFiFe=; zxa4hkq;YI#jT;HLXlShd$j8UWpY3zLb9{OIdH==F?>`J^d&bk8a8_Q^_$Ff6^WMWl zPsl6r7gq8jW3_m{5ZWXUSIj-^9T-aaNkJAgj_DzEm1Iv^J&>lv&#z~O@iI*OsF*W! z9y3lOlJj{K&cfRJaj9L{X?2&b6w3_qX__M%o2_o zo6`H1J{BejK9fn#>4K3knNA(#rwMeyNOiQY5Q%w23Q(IBK>#}t=p6)5gjaa;b9w4x zBrhAZs)0%^S3adiD+d!RDzQ|us{_-K!Brsfy+HSHS?e6S;=^ulwtBb(FzjvT#y zWGszsJiG!f6K#`2&xT$L915YZdjf4I5`cns4;{C`K*0PRAa8^CA>np_ybb1oY~BI# zb{Jn&A{~JjrJ9Y7{zaV|WtzxxvWVZN@Mq}&;{KPNUz|6bw*ZhC;SLF5Z)fLX=xgl5G8v5PK1pv zSTzO9hCrmn%{d-CHJXy98SoNE1cmlik)Z;65D~NflPW4qG6t`{M7+)51#Fsz@!t3i DyJ1#Z literal 3535 zcmb_fUu)Yi5O*HRz}=wh!=43$VXv8*I_c7qE(|uhz4R%23qdH3oEiKl*mC2f>^tlu z>~Y_+J4tS08%7^;CNb!AI{kdQ-`(kU^8NVD-`{^Mc#f=>Ig_HC@OTx8>~-hyv7_Xb z_=hNEk%_(dxKP?G54WOs+Bva|@{58kc^vao7#hiuwtAvXsn_I{WxWj(KPnc2+{8li zh~;t-h4Zn!m*-);I9D(Fb8Op19wtkY@L1$4?hB$a2Y)SY6~IbE4EwjDZ^BCnc}0b)mP}X?f&cx&2F;W{bL-w?h*E(pV&tv_7gn zcItCsLf|)@=8`W33zONbOZ+r}AsDG#`;M?!Myvp}c@YHg1qywa02CD!-r`1keN6OW zgH|X*W6cbz zJ-WmR6I%1wnTZb1>Cqlce(2MlOU|p0qqT^p8`pJdx!HEjioRnU06IFpY3aJVDZPg| zV7gV}gK-Veajj8sU1H<%z>ydZ`-l&0g97XdADBAI!@_=e2q^OYi4wKA_aN}~)8y&Z z&_m!UumP8(7-WFdfeQ*Fb9mUGFi3EL4GJe^04(I(kAn-&5E+*`L{&0fmz+J9IU4oy zxeBNl-z5C?@EQoOveThO5E3UUzdVY;ddQr}s4!>`)ejjJ2JfL+Kt`nq#-OICxZ9T@ zlV4Q40d=6O(@(87(GtSGKHexE)CJqNVBHd^Hl?}7gATDRX`6wN>k^e_R41WsC4Hxr p3wOPwVG%UDv~}HpE?3`Y90t@f){Jf@pz}^te+;(}+qSIF)<4JCh5!Hn diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_lowpass.bin b/bgfx/shaders/metal/chains/crt-geom/fs_lowpass.bin index 6051416b61757f588aa78755d99b4eddb24f0f1a..2eac3b48e765435a7544b64248dd6cb47a94fce6 100644 GIT binary patch literal 4702 zcmb_gU5}ea6m_INROF#af5E7gD%{uvh7V&U-Ir8pU-Fc`tyYM&@fHcg%HYJiQGQ*1 zPTupHo;zS0W*It2YwgFi=Q8KanS0M*-oF3)>6dT6e4gO-!{nzjDp$KC$=}D@+br2V zfAanN6B;^?{F5B2{Vq9=Jl#iCa)`?GKCypBa-ILNS*^45`ocJWUZ&giOZsE|dtn&+GR<#T9&eNKHeMx6T=mK@%4)Y?RV?}|E3V_r z_+&7=Hdzr@9&7P=Wqdv-AF{Z5S7q?jX)xGHYW^;(%?&6z2<0`h<<>ji#ik)ds zudbAnqy*dY2NL#8QS8?3G=8GA z0o`qqS4>)2`@Pv7OLK;w%geHgZ;~j@udZfnRpfY!Ng6GGW6`$CqCL{C_nQsYK>TM6 zRA}G%`n8bxf*m&)iOpD(S=P04N@!|{aO)9~H*K_Q^TVz%`u&4_!oIbXhyp*rr)8Dg zngX7iwq;LeSdMj8Y07@@Non#OYSK^MdeI6yj6vKMt#anqcO8D2K>Sgk6v4l_n{ zy0b0pWiRCjFgi>{UUy1w;i(CN9vi_B@6f57?8xj#}s z$8{A9eLeU0ktc2OV!-{uZ;XJBIEecMTxfbf@+5lUfcKm8V5ETDRool-p{D;MPhz+n z=n?Q6BOqVWYWoCSYBmV+y7U5jph3*}Vx)ksr?@);j@I!`c`b%GKm&)0TJLb9t0jwb zK&kdP5vg31k2yl2qKtyAX;3Iqqv#)SRB{hc+{UjRRO;iPprvFK^l7seiqvZnBRYp% zM85I>#dVJ;h#mz6{wkxuv>OzP)F^a@>eUz>G7nJr;)sH17=`W#dr#BA88{5kh+~|> z6<;ZOoB|+veTcle5Ansf&q5LJL40_M=9zhKb<1=UClKSWAIQeRRez2ubM3}Zn{luLjj4SpoDgZ#9d z`k#7D-z+JKTyxbWV8ND#+Tpynvomj(diU|qXaD^B^VbPpKTLisdATm)IQtmwZqvAU z@#OpWCp2^#`77R6brGLNp4GgH_qFwK#$>f(LTc`CVW^Z7)D(t*$vC0U0mKq>zIkVUK>VP74^De{C%2VN2&3} zV0dlQJgOF~!{@c}_2j%yqv}JIeu$Ec=XKS;>H227=kJQ>=8vd~Y<79M&eOaw?djE( zGDwp3V|?Q2?K+RQ+tNXRx{M1m&DU8IqeJlI=XU)ZfpzqA*(XZu+dMBeT{rhgX$!i$ zIIEa6v+lLo9ZNEXzst+Aif&?_WLH-+w$3wLB1oIdUm4$3DX-ynU2nIT1M#0RP@#2q zH*Z9mFW6y$;nkmHsI3wJMd?7>4rYY!Y7bkNcOU+D%UjUBEqXSJyxg6to@7;oqn_+ zTnfK#-%T`!(oDe(IQBG5<%xodw|}E z^o0SLo@i|Zfk#ckA)KI;F%nZtUa!U zaR+5-2Sl|TW!?HrBYGIfpNwILEe4Foz@TE2FjjuhV3484xYwS?0&OH?*j|eP<54i6 zB@zboslgyajUh&K)}z<;G8lH328;|f*d9qcR+GBANZ+N|U@vF^VBAfq0f*}gW8&4R zZI^2MjP9HB#W-njY{yr0pR1?+;M46sV(6XGe()Qi4UQd9tRZpm^pqcDWO`z^>(xMa zXZJ@Y&=FcQ#L(AMe;=F2N7-9nrY*Gcy z%?)=;66b(YqjADgsi-?<3q=-X6f8}PLY5jue}kivdw}A$dhMW69|r|3C8MBE+qsaX zo{JdK+2lCs$^#VFIiSFL6cp&Ii~`YaQOHuG&>pH;W7uRKpg8^k1=e{KIuQ=;rh#+j zF#wG?Mkzd@Is-caK(vn8i4n3M{@iIVi=Q&J^2q8bacc3 diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_mipmap8.bin b/bgfx/shaders/metal/chains/crt-geom/fs_mipmap8.bin index cc33a49c79f2946b877384092493442b61efc2e6..319ee24f1e9db0b9e75ee4a9d8f05b472b884aff 100644 GIT binary patch literal 18022 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 vi)nW~O6~f5N@VW{ literal 18204 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 UFOqEO_dW2FD(B~CXZL6S1HON+ZU6uP diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_apply.bin index d61f4a1d536a499ec354d25003638b3a3d25bf9f..5e01b8794856a44bc373e1ab00db54d7684c0a44 100644 GIT binary patch delta 461 zcmZ3_JB4op7b6oB+h!idnM_QkMw6E_J1ZL-m?_vQq~#`R7@3;t8R#g)8=D&GmFp;^ z6(uH@Xn=T=d0CWM%qV)p04*~DsW8+tP|#P1&n?M`FV!oJPfyIvP1LKH zEXyh#1GWX|IuH$V4A5a9ohBOSs(~&?(~nIAXp^QU%#6toS%oKevI;2xooNGfi@Bwy zf<2H1de2G$Xd95$0(%pvP=U$PVDep76(*q1nAv>lU}jL_4!A>rb{T<#9zlW~YR#np Y1VyPOrA2uP`K2Y+T(w+W3=9nn06=hrk^lez delta 332 zcmbQjx1M(c7bDYL*3CSOGntr73@0yVc2+jBG*z%wNXt#sFfujOGtg0pH#RZUE7ws- zD@sf*(E#x#^Rg(jn3*fsPG)44p6t)!u3~Ni)KidOu922lTw-OFoRgSapb-x=N=Lx} zVuqRd`EhoL^d^mz17X5${%%nC_BTl4t-@nUkMbVxj>y8R#Mq z4R%gNWfjmtAW375_}r45_)@*n`1Hiw+(f+!O--28}(efK`kgWRans!Q@|TQULmbU%dbT diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/metal/chains/crt-geom/vs_crt-geom.bin index 384123124d8ab94d41dbd7c59d138f7073095bf2..2a43debc10f3b858a03e6a15abae5c3a875702ea 100644 GIT binary patch literal 4134 zcmbVP+iu%N5S82{56VOP2@4b`NJnCLrx-Uufj+b^K@AsZ9}I(~CE8&@k*>IOr3MB1 z3H^%xSbwBvh7`FZeQ8W2w79!7bLPxtcYpfv`}dK+ z^ZP|y-Xtq|H2tO-m{rkjn*4scEq;B5<&DA;vwlr4`Kh>~1x_oqdg%O5IvQ_1KyS`{U07w6|ynQXPJSmmaEaiLhdTd>Fz zRmS>1GN5o|%epGA(kfyJ>zB z1@{n}<|?m_h@*oL18DoZA3{-xws-cW^Z9l0U5hZwpbztQB=P*buP^X{+*wf zGQLitG{3l*i&c^1GjB8UD-msE7FAewSzTQr#1vk=@j%svd=d2jt@sEmZ5o4F&kZn& z=xMbsgQIBd_WEF*XJQ>v>XCK6>0+J6dXI&+XtbUgJ6#vA>*}$!t4*vO6k!Sz&AK(# ziDSU>Ok+2%|L*6)GE7|sB%&a+V2AW{l334t7|=2o>q2S~;9wN*f%ww0`{F<`XLSoj zVT(lXpeSm=osOBIM2lf$(}7LfFi9-{^a&1ZBA6WF4pVbP%U}R9c$dFzB{PRn2Y~p! z&@{K!2u6syhbYlBtubF?q^J;>4sqx4;n!ZL2N61mk{#lMsa+hW0HyP`f2S~poHN)_+)CA>ENX^>Vusn!`F$nVS5fn_pr^7hdd$dGw zsx{P8J|b10X1ePcSYSe3EzOPYK#vV*E==0T>2z6#fwVn%m4f>AjB?*%x<0irB;8$o zD0jPd|GQ63d!r(oZtyU`!!4?@>(H+5dm+w35e@)KA8k7fjbUHLp|>p^lEBeo!7{x0 v(!l;OfRo_EAlfV0Tijj1bbBSL#c8$ zLcgLv)*tDaAw@1pUm6n$E$+_c%$b?J{Pg4ZFDH21^536dOs4Cj>DgpT1C#0dqv}kHk2d{?&~B z^Z8`*Wty+DYMqF$H;Ih1sFdq0y?i_C#>;fGenl_+!`s=cD%1R0?i(s&Fh3CAr-0&x$mcKUDIjlF@CnDoVC4&d;kd*=kv_%8mKOh2rgQ#Uf8s z9rOR_fWnb8tFLI^i4r6ya`i!VX!rH*28rB%TNK;1s_66;9dVsSXGNLHw8$ZM)BGd~ z?jbhKRbFioM+YV7$5L+7%StBNh?1CUaYcBHo?uM@IlE1^5D|kcs^6MAm*xWh&d*C3 zUnfzTUtBE2s>tz~w-x!7h&D2dDu`WHS64_erFY&$pjtz{2>Sm25U(&bMZ7Z2Mj9LK1@1>?W zwM8&O)ICIrrfH4)8Y5+ez;uYah!4N^b9#`WgDUwUKA76&0j-+oS{2-M32$7G!$H^< zk;3JIB0$=Q(=JUDIiqO|Tf`Y>#J7kNyyxPC%0)4QVVj&Za&99xkl?ZxP_3KT%)8fmv^{8Wx zMa<3UyB1|5)I)xJ$G82!cTLZBUDtG6%dn+@MJ z8=j}+k{1gf@Y=4Wv<{4WCif?8mX>Dd2)nJbdWXakqr?k1p2-2%8cTc{yaE8F-dl`N z_&zspj~dQJ-J7OI)oG&so=8j(5OxNH^l`Z4vKKCWVNi`40|AAA>O+n>J0rD0$d(c^ z<%1%wLmz}3TK=dSl#neB*?M}&p-o644}cCKlgm-a80?1}I@B0S$Ro8u$Tl@}v&3o5 zau%SOsP}m-r5%YD$bc4*wrF@`=>)q0R^cTE_Z|hEgUDh3+|6zn|C{VaTgBOmt-emo0wY zQ1AsDgE9$&L75EI24&*#Zdfk{htA;02aRDGHcQ^O7*J6mYpAMt-_gIVI zRI96}d}OLV&2-l@uuxyxv^3Yd13fmNg)nFzr_*Jf2D0|xRSM?YGs=C!bbV@bNVdEF zQ0{i^{&%05_D01%y@vrFZc&Y2n|5^%wRD2QweQ?~X>G;6j6-kRI;4T4#gcV+^QD3P sVE`w=he5PgvNyQ9fa&&1RIA~hS8a2;hv51(n@v7@jywAolfNhb0YH_2Bme*a diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin index 64c780917506135302a83cc39877a063020144bf..43076649d28ec61a3d37595ac929a726561f8fd3 100644 GIT binary patch delta 55 zcmX@jd75(r2Q#DTWKQO%e=BApH7ci?%)@89p6_THPfRS_Z92R{5ncNPR delta 55 zcmX@jd75(r2Q#C|WKQO%e<|dkx7ci?%)@89p6_THPfRS_Z92R{5nLiGZ diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/metal/chains/crt-geom/vs_gaussy.bin index 67c78694efb1285721be71b8e637642a51b5edca..3bcc44a1005b238153d1455a5a3a19e4493531cf 100644 GIT binary patch delta 55 zcmX@jd75(r2Q#DDWKQO%e=4P6c7ci?%)@89p6_THPfRS_Z92R{5nt2YJ delta 55 zcmX@jd75(r2Q#DTWKQO%e=BApH7ci?%)@89p6_THPfRS_Z92R{5ncNPR diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_lowpass.bin b/bgfx/shaders/metal/chains/crt-geom/vs_lowpass.bin index 12f6d160d129eb537be6f23645277747de2e1931..d9894d4dd79dfd4d5fd194de10d0ed42a94e15cf 100644 GIT binary patch delta 585 zcmZWnK}y3=5G5orHI2nhixMgy1xcz&OMlv=lvphVQM`eRQjnrz5kU|vE_#M>uM2hK z#vVZ2+lAi2D|i5B{%@PAe=#ug=Dm3{$-o}iFP^G!@YQ{#hS7#w)o*eZvu>~BcqPBG z$=W=siOAi$$?$d0&O4V_u7%^i|7~!uWx41JSUW6LCGn)o9Heo!#gO6(vA&2TOMP&l z70}L=7OFwrgli+eI3|S?5)6$TjEqc7QX$(QBiv;ka~xUmgg7gRSs?;6%VouBP6TM^ zrzrwOGSr(m^;<8(yZM-uKj(I_yks0k6}bS}q?c?K{RXCH<5(&`8*AB!&O|p0oU&g+ zV`Ao)ahKt)JH9EY!nT%!r_?LXJeqIiW@t#5YzjO2apF)Kzc3q02t#vOsldp5NMO0Z zTe^j?X03Yk!SKv~Ok*XGz|5LACfHU!jTrq6)B=5Lpj6?*T2GZ_iDR+?dkfJI@~ww( delta 622 zcmaJ;Jxc>Y5aq~S?z}`R4aR^B2INk?%dz(*arBDCFoNk#V diff --git a/bgfx/shaders/metal/chains/eagle/vs_eagle.bin b/bgfx/shaders/metal/chains/eagle/vs_eagle.bin index c9bc2774304711877a69f756bd3c8bc2909401c0..63eb9922ed67ab6bd31d4a021ad709efb2b17b63 100644 GIT binary patch delta 372 zcmX>ibVO)_J`1DeWCIpcb3+ANg?M9AOT7wfE(IV+%gIkH0g9Lz!z3z^B#ac|O^qyp zGLsY8CA5I53>CCNiVbxjTEHA*O(Y#A3i0L!#*^={h|3%6Re;O{8UV8lB&Amg6`U-> zI)wvhkS@sb$%5?ijE0jhuzDd2NeiJ^2~p|K<_1*B!>+&rk_2i|nS75;jRWQ~po|JT z)P0lv+2kjOv1>De%ohQwH?^D`z$Q0&2fG>{Og+RWAp7}HeFfHR!J*Az4DmC_3~50O V&x4e4Sb+Ql@^>Jc?Bv@VnE+4QRa5`~ delta 372 zcmX>ibVO)_J`1D8WCIpca{~oig?M9A3%v?!E(IV+%gIkH0g9Lz!6Yh?B#ac|O^qyo zGLsY8CA5I53>36MiVbuiTEHA5O(Y#A3i0L!Mw9Qch|3%4Re;O{8UV8lB&Amg6`U-> zI)wvhkS@sb$%5?ij0Tf0uzDd2NeiJ^2~p|K<_1*B!>+&rk_2i|nS75;jRWQ~po|JT z)P0lv+2kjOv1>De%ohQwH?^1?z$Q0&2fG>{Og+RWAp7}HeFfHR!J*Az1o1P-3~50O U&x4e4fPx6@??5)$$+tN&0Wu#|DF6Tf diff --git a/bgfx/shaders/metal/chains/hlsl/fs_scanline.bin b/bgfx/shaders/metal/chains/hlsl/fs_scanline.bin index 49f2a795d4fa4fd35152552dce6124b9ea816440..870318aedef246b593b31b91a85ffa72a835ff1a 100644 GIT binary patch delta 651 zcmca6zF&;jE!cybvH8Pz*@+nsN`pi7NGLX{b{QRO615Il#1t3Vv$xkc+sWG;M2xO)y zXaE7KV!a9l8wCSB15JgR8U=K@N~j!G$qEHK1w)`lO$AS^TA{LFw^V~kkgGt>QLu$N zP6KGM4#;*WVK}*fO`Fkp@*FllDH8*rvf|7?HknyXiVMY0kmS&2om3MN^FA!z}&&lqaoWO;6FFJp)pvKwk~1Q5_&7J3zx jRY2c?<1INqC%*{j(#k3wkeeq@;Z_HR*B)*OrVk7Nn2@LO delta 818 zcmZutL5tHs6wXvDNtSiHVO=O^Bw#MnQNwchqC-J0$H(3~CO)!!sOPWYpSE_gs zyjbQgf(MT)^atowP`r8HtKdPeDmc@bxYhL?UdZ>oH{bidx67Z8&tJZAWez?0zNfG< z#`E24M|0BeroJDuj~Dp{!V2P~vhasUf}rnb2D&7f8fUyX3S*ym(e_=>K-VR;LSLvW zhYa*+{Q4x?9>3q}+>*@V%+kFu%lyRGOUc&fY>&M3lQ`?GmNeK{Izb9 zq<1i!6>DoIw(Ld=NH2>>Zk2C{jI3hNnjLFE^T43Uj7|P^3$Yyx^vmHBBYr{SAI{wn zKp23@ijP-2JGyBKn4<-feN??Z8kIm4N7Pl#e-?*p%B~MV9r$$j*01~Y7@Ei zNA+s0(`H0Jj7=U36Q6XCyh56d9R{<*>4N%Uj?J6_vfgR8fSyyA=}*;14!y0JtUuFE zvA(O_9JxGP?p65Vy1bY+H^eFISjB(HK}pKk#Gc$7mgMljraPrvsYjpcP1O~cLm%tM k7Nu)xn*Gr|z0Pd^(ofgR)Kfpp(-@LG+teTGx}wz3Z;}MjE&u=k diff --git a/bgfx/shaders/metal/chains/hqx/vs_hq2x.bin b/bgfx/shaders/metal/chains/hqx/vs_hq2x.bin index 4347fa482e0fc5c1c41c2342b7a8b94fb4a17dea..9ebceaa0f42756913f7be5c3c90d3fda26bdf355 100644 GIT binary patch delta 100 zcmeC>?&aPP!OUnjIg;6w!$QGUA>Po!Z1Xf`Rz_h99R&kD109eEkf{rjn7od~PY_ic WsATd67WK&{tg1q&GGGnatV#flOBSX8 delta 100 zcmeC>?&aPP!OUnnIg;6w!(72uA>Po!bn`T3Rz_iS9R&kD109eEkf{rjn7od~PY_ic WsATd67WK&{tg1q&GGGnatV#fj6c(ER diff --git a/bgfx/shaders/metal/chains/hqx/vs_hq3x.bin b/bgfx/shaders/metal/chains/hqx/vs_hq3x.bin index 4347fa482e0fc5c1c41c2342b7a8b94fb4a17dea..9ebceaa0f42756913f7be5c3c90d3fda26bdf355 100644 GIT binary patch delta 100 zcmeC>?&aPP!OUnjIg;6w!$QGUA>Po!Z1Xf`Rz_h99R&kD109eEkf{rjn7od~PY_ic WsATd67WK&{tg1q&GGGnatV#flOBSX8 delta 100 zcmeC>?&aPP!OUnnIg;6w!(72uA>Po!bn`T3Rz_iS9R&kD109eEkf{rjn7od~PY_ic WsATd67WK&{tg1q&GGGnatV#fj6c(ER diff --git a/bgfx/shaders/metal/chains/hqx/vs_hq4x.bin b/bgfx/shaders/metal/chains/hqx/vs_hq4x.bin index 4347fa482e0fc5c1c41c2342b7a8b94fb4a17dea..9ebceaa0f42756913f7be5c3c90d3fda26bdf355 100644 GIT binary patch delta 100 zcmeC>?&aPP!OUnjIg;6w!$QGUA>Po!Z1Xf`Rz_h99R&kD109eEkf{rjn7od~PY_ic WsATd67WK&{tg1q&GGGnatV#flOBSX8 delta 100 zcmeC>?&aPP!OUnnIg;6w!(72uA>Po!bn`T3Rz_iS9R&kD109eEkf{rjn7od~PY_ic WsATd67WK&{tg1q&GGGnatV#fj6c(ER diff --git a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin index 9b5be751de67c734b1230701c306d829488487a5..212b9cc7bc44cb79367a52a30b9799e4f3cccba7 100644 GIT binary patch delta 104 zcmbQnIgN9}6DCHB$xoR~WXuc{Y!%`SO)c~)thp3`AT1|9vBU@{WM(qil=&UE2}C%* qv_x-m0;8NNNVS=XUPVPkrGhp@wTXr^!2kdN diff --git a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin index 60b22be7cef6a50649ce0944ee693769ab59dfff..186b0046f4df0c9afda3802f0cd84c575290f659 100644 GIT binary patch delta 108 zcmbQnIgN9}6DCHB$xoR~rHvG972*v|E%Yj_xfFmPEhj&*#0V&4W-{57`5m_jL^!{+ tL~n8eqns8Qm3U){iOQ} z{RBHVZsmlw!Zw!f?ted>PQQO$yk|6e_YeP$7!P8j)%DD~zb8G$P8tjQ5Cp1PWG>jE zN{@O!7@26?9W(Yx+uVdg!S_<3G@`=7=taX8(Ia<*v{9a1;Gl}#dB1DZ7U-GJ zE0ilGv|TKQkUL9L`+TIIL6m4jAh#?mmsI42f6(r;t48Mq%{zr#Vrlw-W=Xe((^e~q zeF0zEZs}{A#6l$Xb_i*b4&f|G2T|>f7MRjrNMY9yZ%4#3PGMQfUFzq>VWgzBr|Xm4 mT*KFwEe-3gNVKtTNWE>*y~5yaQx9q#&e`!hx{4p!jQt18y+J+z literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin index c648c0a3f22b87aa5cd5f35c8f30366374bc6325..be9408377bb383a8e70393b750632b4133dd59a5 100644 GIT binary patch delta 157 zcmcb|bB|}kBxXj#$&;B)6^#{a72=Hy4fQIlxfFmPEhj&*1SDb#mDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7r$Qzgg% delta 157 zcmcb|bB|}kBxXi~$&;B)6^#^Z72=Hy4fHCkxfFmPEhj&*1SDbtmDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7rxXC=1) diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin index c648c0a3f22b87aa5cd5f35c8f30366374bc6325..be9408377bb383a8e70393b750632b4133dd59a5 100644 GIT binary patch delta 157 zcmcb|bB|}kBxXj#$&;B)6^#{a72=Hy4fQIlxfFmPEhj&*1SDb#mDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7r$Qzgg% delta 157 zcmcb|bB|}kBxXi~$&;B)6^#^Z72=Hy4fHCkxfFmPEhj&*1SDbtmDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7rxXC=1) diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin index c648c0a3f22b87aa5cd5f35c8f30366374bc6325..be9408377bb383a8e70393b750632b4133dd59a5 100644 GIT binary patch delta 157 zcmcb|bB|}kBxXj#$&;B)6^#{a72=Hy4fQIlxfFmPEhj&*1SDb#mDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7r$Qzgg% delta 157 zcmcb|bB|}kBxXi~$&;B)6^#^Z72=Hy4fHCkxfFmPEhj&*1SDbtmDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7rxXC=1) diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass0.bin index d15cb4b355219ccd7cdae9d2f10aacecc588ab34..f27a0f14d6ae71d5d6df35ee75fec9c2c216446a 100644 GIT binary patch delta 190 zcmcb_bBSleBxXj#$&;B)6^#{a72=Hy4fQIlxfFmPEhj&*1SDb#mDv1}nUzt&SVut@ zB&efcq-UU@1yTSMg0oF0^RWgB17)#@t52TEswx3gZJ=j>qy;DdG7zXyeez#cJ#{Ew g6XJ}b)RNMoJcazy5^JtnE-nUURt81}0fqnu0I%pOGXMYp delta 190 zcmcb_bBSleBxXi~$&;B)6^#^Z72=Hy4fHCkxfFmPEhj&*1SDbtmDv1}nUzt&NJl{z zB&efcq-UU@1yTSMg0oE~^RWgB17)#@t52TEswx3gZJ=j>qy;DdG7zXyeez#cJ#{Ew g6XJ}b)RNMoJcazy5^JtnE-nUURt81}0fqnu0I0hvA^-pY diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass2.bin index c648c0a3f22b87aa5cd5f35c8f30366374bc6325..be9408377bb383a8e70393b750632b4133dd59a5 100644 GIT binary patch delta 157 zcmcb|bB|}kBxXj#$&;B)6^#{a72=Hy4fQIlxfFmPEhj&*1SDb#mDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7r$Qzgg% delta 157 zcmcb|bB|}kBxXi~$&;B)6^#^Z72=Hy4fHCkxfFmPEhj&*1SDbtmDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7rxXC=1) diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass3.bin index c648c0a3f22b87aa5cd5f35c8f30366374bc6325..be9408377bb383a8e70393b750632b4133dd59a5 100644 GIT binary patch delta 157 zcmcb|bB|}kBxXj#$&;B)6^#{a72=Hy4fQIlxfFmPEhj&*1SDb#mDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7r$Qzgg% delta 157 zcmcb|bB|}kBxXi~$&;B)6^#^Z72=Hy4fHCkxfFmPEhj&*1SDbtmDv1}nU_(n7~6U2bYw^;)@U_z5k G*t7rxXC=1) diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv1-noblend.bin index 2b1a3ec0d82b2966a6f828d8eddfb0757a6beb7b..565610e8da9ae43f93e8a6e699de55f9eedd325d 100644 GIT binary patch delta 29 lcmZ3-v5sTI6DCHJ%}<#m7`aUJDs>ce;|ce;|C$qDt0|1QV2n7HD diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-3d.bin index 4ada44c964be126955b8208be3bb3519d0f2b478..9d797cc3e2d21f080cd49b5e05cb7c61cc7feca7 100644 GIT binary patch delta 252 zcmX>ja7JK58VjSz3Ztsg1(^Ys%VbmKN0l>}EWoNbIf0R5@-a45 lAyhfIHWhYN2~;Vdr3gDiK=y$xK{yR!-+Oi~ta3UW3ILC_IBNg^ delta 252 zcmX>ja7JK58VjTG3Ztsg1(^Ys%VbmKN0l>}EWoNbIf0R5@-a45 lAyhfIHWhYN2~;Vdr3gDiK=y$xK{yR!-+Oi~ta3UW3IKzvI8p!r diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-fast.bin index 081cc6a46187320dd181d806c41b7cbcc90bfc48..86b33b05bb4d444047aa5fb13b0de99189aa99aa 100644 GIT binary patch delta 101 zcmeC>?&aPP&dg+KFgcRhl*35DRw3Td(qQv6W>!XFBOL_;Jp&z(2#~1@l9;@X#ZM4b X9H?aS1{U?nCakJLs4`#;*{n(cm+ls$ delta 101 zcmeC>?&aPP&dg+CIXRNql*3TLRw3Td!gBL8W>!XFLmdSJJp&z}h$WDz3zC?;j>S(9 YRUD{f@&*?5$tJ9-LZ~ue4cV+p0G-JeyZ`_I diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.bin index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.bin index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index ce2ae31904bb5a2587d115b9eaa0fbcf7837a96c..916f7b8ca09ecf1fce184ae50cacceb7027c9e02 100644 GIT binary patch delta 240 zcmZ1=us~pg0}G?sWJeZLMGFO6g?J+~GrbCHE(IV+%gIkH0g9L#KqWR$XJKWOw$M>9 z&@<2hDFre$bdB^3G!?YK>Ly=gQ=fc~RaF>OjV{Oxu$(QMDi5;UhDvYW|7i0!l&X!G;2U%`%9$TOgvH;jvkXj!J fRAHbk$d<&g>w+u+n~ZP|#FE48TG-?!aVP))f;Tts 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 index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t 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 index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t 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 index f600a3f74cbcb54f0861cb44b31991dd587d2af6..19b377d8bc5b169f1203c0c96abc5cb9997e0b37 100644 GIT binary patch delta 91 zcmeC+>fqWS$INInS)SQc(L}*kA>Pp3NUy@0O92Sda`F>PKq6*PiOr?VT#USCItm7Q b20CB~&B^*KYLhpysPdQ~L`^0?W>EzIzY!G? delta 91 zcmeC+>fqWS$INIrS)SQc(OAJ&A>Pp3P_M$8O92Sda`F>PKq974iOr?VT#US?Itm7Q b20CB~&B^*KYLhpysPY&iM2#muW>EzIy>t}_ 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 index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t 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 index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t 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 index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t 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 index f600a3f74cbcb54f0861cb44b31991dd587d2af6..19b377d8bc5b169f1203c0c96abc5cb9997e0b37 100644 GIT binary patch delta 91 zcmeC+>fqWS$INInS)SQc(L}*kA>Pp3NUy@0O92Sda`F>PKq6*PiOr?VT#USCItm7Q b20CB~&B^*KYLhpysPdQ~L`^0?W>EzIzY!G? delta 91 zcmeC+>fqWS$INIrS)SQc(OAJ&A>Pp3P_M$8O92Sda`F>PKq974iOr?VT#US?Itm7Q b20CB~&B^*KYLhpysPY&iM2#muW>EzIy>t}_ 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 index f600a3f74cbcb54f0861cb44b31991dd587d2af6..19b377d8bc5b169f1203c0c96abc5cb9997e0b37 100644 GIT binary patch delta 91 zcmeC+>fqWS$INInS)SQc(L}*kA>Pp3NUy@0O92Sda`F>PKq6*PiOr?VT#USCItm7Q b20CB~&B^*KYLhpysPdQ~L`^0?W>EzIzY!G? delta 91 zcmeC+>fqWS$INIrS)SQc(OAJ&A>Pp3P_M$8O92Sda`F>PKq974iOr?VT#US?Itm7Q b20CB~&B^*KYLhpysPY&iM2#muW>EzIy>t}_ diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t 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 index 8c3124f12c59aa8d039c98f5f07615f1e9b4d392..a8ab0abeac0b456d4fbb701dd30270fbe39f32b5 100644 GIT binary patch delta 45 vcmdnNwS#Lz05hZU=0Ij4MloZ(3LOOlJp(8aZ)k3;SE)H!pG9r*e3qF20l5oG delta 45 vcmdnNwS#Lz05hY}=0Ij4MlmD33LOOlJp(8aZ)k3$SE)H!pG9r*e3qF20cs0J diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin index 3ef69d17bd37134cbff814e86cdf82d9c67c4512..bc0c85125507a790afde92a5c31c06d3bd72efcc 100644 GIT binary patch delta 241 zcmZ1=us~pgJqweW!DL4kQ$-^MTZMQdGXuQ}Yc2&KNXyAjECGp_KqWR$XJKWOHqucr z&@<2hNdTD|x<+~inhIKAb(1f$sZYMgsw#}CMi*oTSk9JBl?PdFavoct5V8Q+SddyD g2~=UAEy$L{u>0h^3)55$tg>{{65CUGbL0DOx#r~m)} delta 241 zcmZ1=us~pgJqwemv;t diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin index 25dab0a9d708d0ebe5d42a9d89e0da744f54f36b..2592472dc3bb3f77e51763320bed266239a06e30 100644 GIT binary patch delta 38 ocmZ3(v4&&A6DCHZ%}<$x7=?}WDs&VK^bDXxyrHSlWG)sZ0NBzAga7~l delta 38 ocmZ3(v4&&A6DCH(%}<$x7=;b>Ds&VK^bDXxyrHS#WG)sZ0N9ubfdBvi diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin index 9ebdf5141b3c5e54d6625a1e8c5f0a3e9d0580c4..52668f70798cecadfc42ec7d775c019c90f3ba12 100644 GIT binary patch delta 38 ocmZ3(v4&&A6DCHp%}<$x7=_LBDs&VK^bDXxyrGHNWG)sZ0NJz&j{pDw delta 38 ocmZ3(v4&&A6DCH}%}<$x7==ysDs&VK^bDXxyrGHdWG)sZ0NHv8i~s-t diff --git a/bgfx/shaders/spirv/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/spirv/chains/blurs/vs_smart-blur.bin index 2a9584f62dd942aedfa937c0adc3b64de3c83e35..7238fd819ec683d6541c8eb3f88c3f370bca2e9f 100644 GIT binary patch delta 551 zcmX|-y-EX75QS$+)vX$+*)Cdm`{1{MmotDTLou#b=@h(9S*r{L3pU`b zfxfFe`FeDyGXk`B4^0g9_~Aq4Q~te&%G2z?mdkw}(Z^OCCF`RnWPpq#=>E^35x@Hj zT0OdV0Ii=^_j*MuNJVn)0-qABqkEblklnV2qLIM zvF%U(-9`%oaGNh}oLA^Cg^2T)*YLxNrcf;DO zR^j79ldeZYT@s+Z38*5-8(uS_J6!MLk_XjjXNU#6^ diff --git a/bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom-deluxe.bin index d1294df79f99621081f5ef51afcae4787cdd1447..d52174eeff3bd4497118bec1e7289988424caf73 100644 GIT binary patch literal 24496 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 EzefTSG{yo3nv!1oq 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

us+S_LDY)( zu@5lq@AKW94{dNcAMB&9U+(20>NKCTCH4qx$MU&vxY2OV!+S5Wcd{?GXODf<^-G^I zVB`2%G2`t4XFs)Y`-0_tu9tgie{6ZLaO1I^Z^=!lIOh?+iE#Fn%l$hE+nC0%k3K&0 z@LqNA+{f(QKY`zD?`|kG=TYw6O=$MDW$$hV+sBr?+y>UiXO`i0J zXwI|T$609hwPhb?gY9EWj{X*`k7sAN1=#lYxo>jaiJe^AM_s?<@B?6d{JfSpOR*ix zXRF~Zz;+&!Sl)lT%2~BHwtU$V!*4k0uTPn~!?2UPHgG=k3<7&*`?)3Yhr;P<2uZReO|?u*Eexq0~_DZ+v@qeoj6%NJXOyPG7a`!78wP*>W$P5AS&TB5NteslGk5>>v??wPTsg#>my+Mdxd+n;>x`KJDk31 z$?G#<`LZRikHI^hK8gDtuzBSzrIptc;q+BYUQYs>TQ%cZ^QVG+e<|%XY`)ce53sJ!06QPw1Jnl* z#P`?4K9u}=_Ue}w~uzOM`6jmI4H|8$6xd_eN$i@G|HGh4Qn|}ZsPoL!GI&eKV zpMaA$ZsvOlw*AZ8Tvl;qZZ3z@S1q~uG+6#GT6OlWf_FT9GS+x-{oFnPPG7au`~d z+%E6$X>jsot`EaD*J{b#Przla^+~RO4mQ_v@&855U!Uaqmtf=RlU%<9uIKt?ICoWx<;rG`eQ%f!?-;w$e4o%a@sCC8FaB}x zYKcFLK5}JC{CB}8zU$F9xtWQUXYCnt6uM*j9nNx1?eJ>x+p+TVyPc)qXn3{w?Ogf2 zQ1jabUM*`l3M^N)tl=&2S%dk~H}Ao_fz=&1v33VL-?C+&$H1%GFaCRi%|+Sr_w6_| zb^B#adx87Q(cbWC@!O~JtLJE6cs1wbJ-r{;zVf-x4*<*C^7rKgu+LJ}^7re3U~{uO zO+7Iuf;Ymcr~f3d@zneq&-$AJc8$4*4hDzIbB06UGKP9`|8}sNag(p9V0rVEIyd=i}VQ%k47xDsA1weUHxT-j2G7sICxJp=VkE-nG9J8oiK3U&_Iasc2smZUvrzSlc^-W&x1*{ueR&%l#&JwfH?<`PFm38D1@Z&sKi*`g{&vEj2QdhsttgOMU(t zKK1FDsc&-h8#HytO|1U`JKwS;SI@(%+b{kvg3U+SlJDQ5soO7W`af`gIeH0REq=eN z{OUP+8D1^5^a|L%@~O{1faPteuRnsVPqozN7I11uJu&|Twm#L<|Ic9Ksii)BnC}`> zp98SNr9KD3WeoM?eh^sAxXITLYvVT`wbaTCuw23SroAT`9IhOsd#NWQ^GvNHq&OEUD>TeJ8-M%y7SDE=6tX*ucjsD0yz1^>;%i%yo_l+HP7Zh#?>d!k!}TF+4R}^?|bXv zU`*tHqI8(z(v zX!n5aE1x=C26i55iMJf=xc;uQ9Cro0TKqm(`T2X#((eLzwbq#j-bg%oYu&kgm-QMi z@8uVPlMA&At3J{1uJp+`4ZYWc0<&%ko48O+#E zgT4HorP|MFzoHr6*TjDUY6b6xe-{PhO{z2l+JLU(MkrIM?hmR@bke z-!E~!j_+Ljex?8a5!%u8@wckCRcGvL*z*3C+TU4czqY{Z>+e@H*6Y~iSpJ4JxgP*l z^K8=3-?94p)96zw-M!J*_>Nu9)ja0AAI{(J`@6=U;_o`mrEy$S&dIgZh`Lv}Ybwt9 mguAxl`rcpqo=;x~XMg?G&H2&nr@yCG`!g##thuTwZT}Cl$_)7c diff --git a/bgfx/shaders/spirv/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/spirv/chains/crt-geom/fs_gaussx.bin index e60e999d61ebf19e5beba2328f3f282654d2e3c5..5a91cf496c524d82cb2833fea2d747cfbbeb8b76 100644 GIT binary patch literal 6598 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 JUK~Ts{{Yr%G$#N6 literal 7122 zcmZvgd#smr9mgNJ9B>Da4vG_s9iTQuBF02nhC({Q4f7O7OlzGEav*{udbq^gGBRXV zE~&ItRzq^iSQloNc9X;MQm#?vt-1c7Sz8v>*2V1RdcB_Wyq`UL`h9mkdp@7{=kxu1 zzu(vMJ-6TG>(+G7Jbd6_!5Ck3?;6-Sv}a()mYau`^qe-mI8C{jv}<7V;PCKZ58;?H zaffwFigBjL%`5iJX7;%GlgxJ)lZ(EICW_*9R5+u%=qjJ9*RET;c*o9-i_c%S#QZeY zbXapnae6U{fv}w~0Wi`(dZE2->w%y{qbo=&^jbnTCtQ$6O+B0zZ$l&J726qlZ zYc(hIO!I8UNIVz6r;0sWGjD93cEuXj&spXZJED0OwdvSu&S9N%T*EUpdm7u*Ip%#w zbMPI;p3yjY&u7e|%zL)f&p=h5TfWV)npr4aXfx4#&%M|=+>OaRjqTeUiO**3ZW7km z(|BqXdpC^FtYU9nFYyAN4%fS=ie>CDf8Ll|u5I2}rjE0S-@>yOa}VcLu@}1;pHJ+V z&3Tsd^c>c@&$XB%aeo=@y<`q~-+}wr+{=2No=e@m82c{N+{?Rp_F@kE8DERJ7w2Ec z(^}WfdIR{3Y)E_A0(K>#hj1SiFqh-9ej-M;zm34fojEg!R@8*iV z$I^dA85b)P_m}a?I^H@~U&ptW@xeO&LK%z` zmyNCOseJF4d1LQ(@^kUMSLtW$U01t+?>$^*jSaO|QT+L}0@eGs5cBRCdq>`kdDo2X zIh6+PFY$DI_h;;$&ct^=tLWyt-iPn~@IHDEtn=O9hHmb5RyW>{@4Zux_HlgghFTwW z_WuOF_to4-EA5l`u4`^Rn)mw;9L~Lao@>zD`ybKNt-p%X`F;2)e09wsN2GfHcM`aN zzkj@!+5Z7_bA6oCK7VDtT5JlZQvVE^J!fIAW!*d3k7vG%Sbi>@KK~?8kA=lOXnr3w zS$qji7Usg@%lNV|7ZxD@KNjP>1eo<}j3+!s-~lKU15mM$u$tF078@%gS6>Eu>eQ)gm-?>%;0Xe09yy zX7xDvPOP3lHPtHr|VMYOPT zE$hPSSH%9zZ~lzBlDv8>tWKhZl|8MKUs%0_@9*L!tKXo>%3N6e7GGB8!m6KMZC2~i z)U6Mz-#G_ObF^8#OuiGV-=mugtM@WrEf!X%(89{KtP86@5zC6Ny3Ypk>ano;3tCv& z(>nQu)!*??(WlAk6*O6y3#)(N%gS6>ZJ}42)mAih>%;0_`0ARY&FbIeJF)r?y1B5r ziTP@=uzC$GtX#{wu<}C5%6$5K$bERxDhsO##9?Jm>*No74SBr(!bToVVcY(R|+pZ73d zEtd1nLCbkv%R1kazu$X_J%=^-ioiTIohl)BHxMC+tAI0)iLI)#lq@h zw6Jn5>%wX!ar@`QISXga93oF;MF03{Z%Zf+c=g;KTV`23HH2cWPp4Q1PthVC&89%!`G;`aYx=a5&Ah1DHZA6ePcI{Agwo%nus)MRx4 zO;+Z@>eKkLG8b08^lG!3ho)|QSlxxMt~uJQ?k3-f)#uR7h1CM)tHr|V^Jrn^TGoZt z7l~!XSKVhZdG%OWeWmInD|=cezp%O&-_O;WtPY{c%3N4|6<=27!fF}4+N>@_Q@1{> z?#EZx9Boz)knhCmFuJ+0TETp^SXdoF3oF;MF08&rEGr&$pG(QB$HM9;ntfztPwV8D zUJv5u?~iB?Rhsi;<>yo1Mzhvj>K?A@d}pb91kGA=srz14$D^+MK7qC7Qujmr{A@|T zN71Y`m%7oauDQSCXx5rb-H)oe=KdZ-v({Ydo~Y`0)cbpqz*=*%l)+E%!_vRAtm#M3 zy?d&Pt;_qp0^aJed~S6D&39uypO5~GxYM2aIl8&5^EAHes%M?6=%XIXJ$eSsJ^R0e zYg(6cKTB-h5$(B3b56A9D@~4lkeJHz1vKYdZ{Gb}%#HN(Wpn>!)#c^Ny~Y0k2+2xN diff --git a/bgfx/shaders/spirv/chains/crt-geom/fs_lowpass.bin b/bgfx/shaders/spirv/chains/crt-geom/fs_lowpass.bin index c8231a11e7d71bce345b4f2c6fbaba4eba3f02f8..fcfc5b0ee79a2914d184048167589eab4604a0f3 100644 GIT binary patch literal 7667 zcmZ9R3v6Fy8OG06y9*sS=Eejv(`~v09dj4TCJyLiY|P9sm{X@hQ?~8`?aF!?Wx>%! z5uy=DBnSZ_;3Wh#(P&IGBuu7JGPWoR1jzy#AztDI1ImnB{Qdqt&++7Z>6`!iKJW8A z-*?{Uv~*?N<|{f5|7*c#3fAPJW3*?aZ>(o{_x`@6vnCYP7JdMH%bwjk28RYd)IYfG21?jd3UOC$7Vz7O@fPaY?X7$6>*>F7+hE_0 z9mC67nD_oaw!DS;9Q&Nt*_K`IlF^~95t;^FKa!werH+xHg!_BUM_Oa z`(Rl+PnZ1_6KU&g`_|6SHHUg7pPhtvcwbqsCU>37{k!?}-uArLR>HNIxqH`75@JR; z*N_**_@(OilXY6M>{}1CDrY$1lh5c~Z{^eHK0tU^>v2NN{=qW$9y#kSa#&BM{&uS_ z4yAr#qV7(8q*ZrU{g)={s{iL!Jzn)sOw?6>+9ZL8tNz@Hy6P`#)rYEn*F;_Q*S6|c zs{ZDQy4&X)Ah&cLKEJi^rdVp6l#mAO9HxAtA-tFZrh65o^PS^Msa#lP9SIQnH= zh^Nllcg-d5Ef9b9Tny?vww&<&vi7~`B7C2$J!c4g@0@y++&f!)&zs4;;~LZsQvZZ} zoKN4m0YaYsJ_T;?4o1pI!yhg#flc_-7W*yG*rrBL4$?7k9{>mB6X z4<^^%Cg!8|cge*Qa>XA2^IZGU{5fLI-P)nY^s%{{8YQn0Vcn*QoWyUgrE>v?wcIFJAD z_)8jmIq~KF&P@&-@kI=9C zauQ6u?#n4^eX*B0--8xq<%^v7@)dgeA{PFA4ZfWCazD9xa^lPP$eX@=A52```0^07 zxZ(0nbzi;;uD&ZXe5AzW#+OII(#}o~zKGUpX&sU2VB#Fq={>5EwSD;s<{@nsdcdUE2+Ci12)SA&VG8(&saiyJQQM7x^T zCE)72GQ;i?lN(>wfXTI&xqgCNJP}_m1M^(_(R>ewHhsC4zIY!*6^hGTE{sv!8d>J5DPfmQfjlAj0?O@{S z#+SX+;)csR(XQq-46eQ_GaM~3x$$Kmm|T1DUR*UgrD|T587^Iq~ITdio+3{v!>(ocQu6 zxq5Qq%a6&MzB~aYu5Nt!CbhWX@=mm?c|8WMzAH0)yu{?jmv4c|wU@a*MJ}F*FW&+4 zT>H_ym_wVs{DQuCBEGBv^K5-lOP*fEm$l@JAk=-i98A3K%Q|X(v6neNibo+-mrG1;e0c>- zuD$s3Z*uWOeEB_?=h~0v1`gF1&(8jn^u-hL!`@5&5kmzdo6G6zhqz07qnxp*SJ%mwpY`_bIOp-o?w(-%*~m#tu)tuJcH)2sOM zY4WuY>b_h9CSLdDT55fdA>OTgjWgdCd`#1BtFT26S>%Lr1tuOX6=e=mD9be?cml1mUA{PE=gD)q( z>?2oCPJFqOyy?r`VB+e=m;Kb@hRZwAuI6?j;vb#Fv9$ zo@+mv1034)?^Vz=vCf@qF#ov?t8}~l;i2E+&9yfuh r?+P|nVxAf7<`R>-2{r#7zn{YW^6jgC3F`iT4tpoL^{Up*XBPhhm7jp{ literal 7607 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 literal 25863 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 L@1!2^9)s>Z&3y*C literal 3002 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 L-Tb=~zmfbKH~!$6 literal 8328 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 diff --git a/bgfx/shaders/spirv/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/spirv/chains/crt-geom/vs_gaussx.bin index 386197c82dae007b28cee593fb4e6da7a728c97a..05e763ebf91274a671b678eef5c749a8d5f3d914 100644 GIT binary patch delta 556 zcmZ9Jy-EX75QWc@A5)}ABNi4Srm+Z!Rw)cb3tLmC@&yd|0ttkOWgrg`jXxoXf`}=i zF}tL*=1>2>R(2Glh!yF4F@~?A=H)E5%CTVU=I%A zSXnaC2%PIFw>saW-D^MeKA_#Z59!`V&d!D2Cv+9?+qy|E9Ao%WCxbUZpMrD2dq&&0 zcdiW;h(BOIjfXk+0w>^_BCl@m6(ZPX{;D8c{)V|e@Ey;7df+c-`)R_!5BvtWCJdaS z69>ecs_lG45A9MaQGym+)&P(&s;3WEcY~Sai(QrLq?p#P3L0x(65-(vJHem<$ zl_euxfpb0O7UyfUd+mqb8?<|?knSCGb}sbZqW1v5qx0m#I}BgyWbhu)4R9`a6SRGM zM_N&V_yhLSc$jlfZ~(3;^6K`UA%ZpLFABotFPO^%U-9gx2mW%lpC$}^!*7CX!oVpy z9w^26c#AXU>lFMnlTEy%?YSX*;RkvK&Q+iWb?T3apWwB(z`tvY_yzU{$rirRzQcY^ W8Fh*FR(&`_cqP_-;&gae*!TyQr9{I3 diff --git a/bgfx/shaders/spirv/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/spirv/chains/crt-geom/vs_gaussy.bin index 2fce758cf2636988a8635f82b88ceae30e736f75..8e74e19dabab6b4fc6347fc1e9db3e5e1e6bf4bd 100644 GIT binary patch delta 556 zcmZ9JyGjFL5QWd8i78T~5eqBP#zGPhECeG#A3$wvtb711e1IS*S_bkG@tO;wAmSGB zlHN{VB&FYpJFvL$F=x*FGqeBhxH7J^j*_4Laau?^?P_tZc_pa>4HdOYyoMSq!WwL7 znu>G-uAQqe$#2o_wI98AX!kBdzW1Kowdn1l*8#t&%WPl|!$VyRZ-Cwg*TQ>1+qbu) z8I_1%U_XzSx%LQK;4@`j-QE)5;)d_&A-J{#o6um$A@KuhZ~*>YE5uK*-^#wi2<;j6>zdLj U(cY|+GlV~h^#w6)@0S*S0lr5?pa1{> delta 556 zcmZ9JyGjFL5QWd8i7717h=o-!jfE%(DFl@eA3$wvQuzQ{_y9pL#4?bFh<6DRA&3dY zTW_aNlG5+Q9avoWm@{Yonc4k!Qk)dq$H`CcWRy#~owfX8<5E%=s>*AFcm?aQ3>DbY zEEVY*Tx%*f&2P}|wI98=X!ou_w)c+QwdlP^ZvuWp7wNzU3=efNydHWNTnq0JZQtIW z=2Relf&DCA=2{_C+vN5psVwb#MFYnAu`_S@+#e4;(W{pF diff --git a/bgfx/shaders/spirv/chains/crt-geom/vs_lowpass.bin b/bgfx/shaders/spirv/chains/crt-geom/vs_lowpass.bin index 32e06663dd43e51b6f369a59667312f0812f5189..542bb67cf15c4215feafd96fa4a50c6e68a1c26e 100644 GIT binary patch literal 4424 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 N6)cG8|1vk={svx<&D8(^ diff --git a/bgfx/shaders/spirv/chains/crt-geom/vs_mipmap8.bin b/bgfx/shaders/spirv/chains/crt-geom/vs_mipmap8.bin index 2ed1f77a862a93970a827751aa0fc77a6600e8aa..3b47db73a6489487ecf7f8459e5eb702d2ebfb16 100644 GIT binary patch delta 144 zcmdnXv6o|lF=N(7lWgYt6b1$cb07wRKn7L@HXxk}#2_(7AP!()2SNshG$0141<6SO zu^bRP0@bSl>2x4g1!8F+wq;;pPy*5!KnxO}08|6gp9#buGeF{Y49pC!5V6T}Eb;(@ CjSam3 delta 144 zcmdnXv6o|lF=OUNlWgYtWCjKXb07wRKn7L@HXxk>#2_(7AP!()2SNshR3HYa1<6SO zu^bRP0@bSl=`=mGeF{Y49pC!5V6T}Eb;(= CFb%K( diff --git a/bgfx/shaders/spirv/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/spirv/chains/crt-geom/vs_phosphor_apply.bin index 2ed1f77a862a93970a827751aa0fc77a6600e8aa..3b47db73a6489487ecf7f8459e5eb702d2ebfb16 100644 GIT binary patch delta 144 zcmdnXv6o|lF=N(7lWgYt6b1$cb07wRKn7L@HXxk}#2_(7AP!()2SNshG$0141<6SO zu^bRP0@bSl>2x4g1!8F+wq;;pPy*5!KnxO}08|6gp9#buGeF{Y49pC!5V6T}Eb;(@ CjSam3 delta 144 zcmdnXv6o|lF=OUNlWgYtWCjKXb07wRKn7L@HXxk>#2_(7AP!()2SNshR3HYa1<6SO zu^bRP0@bSl=`=mGeF{Y49pC!5V6T}Eb;(= CFb%K( diff --git a/bgfx/shaders/spirv/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/spirv/chains/crt-geom/vs_phosphor_update.bin index 2ed1f77a862a93970a827751aa0fc77a6600e8aa..3b47db73a6489487ecf7f8459e5eb702d2ebfb16 100644 GIT binary patch delta 144 zcmdnXv6o|lF=N(7lWgYt6b1$cb07wRKn7L@HXxk}#2_(7AP!()2SNshG$0141<6SO zu^bRP0@bSl>2x4g1!8F+wq;;pPy*5!KnxO}08|6gp9#buGeF{Y49pC!5V6T}Eb;(@ CjSam3 delta 144 zcmdnXv6o|lF=OUNlWgYtWCjKXb07wRKn7L@HXxk>#2_(7AP!()2SNshR3HYa1<6SO zu^bRP0@bSl=`=mGeF{Y49pC!5V6T}Eb;(= CFb%K( diff --git a/bgfx/shaders/spirv/chains/crt/vs_crt-caligari.bin b/bgfx/shaders/spirv/chains/crt/vs_crt-caligari.bin index bf12ac2d0c82255ff7cc9c26c0ba2cdd8db758ab..ab3465118e642a44bf7106d6370ac33f9c64e237 100644 GIT binary patch delta 296 zcmXw!I|{-;6h&Xi$0mi9(N-HlONAgPq}DP}@SDiMh6-rg@~ delta 296 zcmXw!I|{-;6h&Xi$0mi9(N-HlONAgPq}De>Jn?1et*36cmZ(+U#)E!83U~V;jvpvYGy%sbf!QZDIpa*Rjn`d3> z5u|5$lutotNKd$BNIjX2zQKsa02EdO`ES!U|Ax-2b)obsT;wl5N-ih`RL(1NIi**v g-A;+8N#(J{rGuBCe0FhWBjsO4v diff --git a/bgfx/shaders/spirv/chains/default/vs_blit.bin b/bgfx/shaders/spirv/chains/default/vs_blit.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/eagle/vs_eagle.bin b/bgfx/shaders/spirv/chains/eagle/vs_eagle.bin index c18d0f948c666777b13c692335e53fac4d856e79..9a32aa276588ed32d633ca7f69dc145374e3926e 100644 GIT binary patch literal 3879 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 diff --git a/bgfx/shaders/spirv/chains/hlsl/fs_scanline.bin b/bgfx/shaders/spirv/chains/hlsl/fs_scanline.bin index 2a4b0a345b91603951c3e93d4ef61a310f5de980..00d4bb35a7979828ee9bcae5f54a289bc576cddc 100644 GIT binary patch literal 4852 zcma);Yiv|i5XbLQT7ec@7Ayh=O8H_0OJjVHC{T<7CL~rt{Upn>-Ij%Ix9p=WMx_K1 zVtgPfiukB#K$HZ0BqHJ?VnRqrFi|vth=CXlKKNiXs8RI)yL)CitTplUPVdbBKQrgd zoOAEpxeMo4N7nv)GSH|A>I$)3BHoowbtPl*boa7&G}0VI;DSp%YH2pru`D0Uw72Jy z`DkQ`a~b<@7iCK)qmfqUFi&!HN}+yCrRJI{ zE?nZmcxQJynUyKOs-Vg6MajN=A)7S3Amxs(RC^}dd1E@0SOH$8KX68A^Q2d41>l+* z{QOphTrr07z0Fn3urP*dz0QUQO;Cxa4v!DFxyTO>-DxbkRRtqLpQ=H9iYK<1 ztGE{W=;bON5@EL1VHfhn6B6>pwG6+IFP##>r5=q4eJ(hE+J}mu7blHM{jtYAu|y`F z$%bbFj6Lt+h$S+aY+JLCs_+af?P%|d&CSL;Zi?sQ@}8%iXRjN>Z0GICvZE4s_T1;O z;n}14%4~Z)MK;4QEg=A_^Dtt-8a#|W1!M6R%RYj&co=&J*6LyG71$CFV_(3!J&e5o z>-RAF54O?6=r`DaWS;s=ZLFC-(DOzK!)*FMo!IQdL`V&6_5j;>o?YmN%t z(Z}mQ_0$WYh6c&FV7N|x@tGx$Kg=GhxvE7FLmupr&Zdvpqn*uM4YIG$oxyz9JDYRB zfWNY+hI7MXv+s;cWM8LygM>9qb@q%h`v%#J396?>cj~~GbuN-H$aS~w4Hz2m*o#9e z2*#+QxQ8dC+nnTC9{Tmqo~EqSoRg5-1b(6z_7VR73O(qNKm8<@9$<3@z^vvz>DJR# zj$>WM_e-b8X0MmdImX6slVpAUmRV+Rmc8xf`q^f0m3_4D^h}H2A=~CBewRd}#r$^{ z?J%A_Iw0W;7=KXu@!DHLfB3@^@>u>O(s>5V|1;^wY7dq29hYtUNc;&2&(Snh$r(E< zq30&_@o(9zncicM*9NkO*z^^fX9o;^veP-!@Yp;{x&rtnDfHapv3a(@u2pxLi<%i= zzX_q|GljAj(CDO4=lt4bgR=(~+aa5H zIEzh5CstP}cDW32KX!#|;^EG!qi1wy{GtB9r6rvb`i%a&?)YGX&r#QTHoBzu>drI6 z^G$#0Q${$Pt-o737_~FsDd`O6gIg&9BR{(3&q^nMzr@d<6Aov7dFNNYj)HJF^Xqkf z>&x=>fqQ^yhYu&lIUpoBDtwJS*FBCgf+&!B*jLHurPR zk6L`c=Y_*rEiXt1^J{rgHu>Nz-+=VN=6y*xoYk^TI<e2>oDf_|>@cu~)jT@cV(U zt>azkte0=CU;jSgaOU@(^E*-Iw_iA%`MvM_%JY379Ii&EmGk3~*w=`BtBj&9{{MuR00LKVBqr^Zh1frS4YaH`3t|hRiUR@!txV zzvE{XYpK9)Ec9`@c)h$hKN1 cC@`nkv@qi6!z`_2y6$j)slpjym3xAJ06-WjT>t<8 literal 5259 zcmb7{ZH$~%6~~|HcGul*+bs(%0)}i`LriSy`i3Sg?P6+MWszz{KKL>W+iAPHyR**j z*7burSgR-~6_uB$*r;HLs6|DwqE?M4Hc{002EL>*8Z|LS1+@f?zuzQ4$;`Vccwl& zSQ$yoDw*2U#Q0RbTAP^OUmL9KO4O4x>YC>GzWuY+h;Aj9bN|~V%{-kv`tW!|ZMr)D z#zB_SUQPd8_4RYLJ=HzqlQV;rp@go$voY5kt0#O_!t)iTVh+B%T zOxDJy#5WPV6&XcV;VZ`^XkA4&&qu+#LGzey=6VKPxy0SI$?1uD6BECl;#q;eygolW z*Q^KrN|Y<7#`iXwlP{QPjJ;00hkxRZ&f%f=umW+W7C(JdCD)Fz{OoW$F;?r&p6<=l z`K+PCwHu7M-f}K$mCG9xsKfUxXyA)|hBC%U%+*R}R>k zV~s|0&oD?&**n+l+dE&~-mLB0R-3Kiy@QUiN7j|uPTOm-2N8LDCFix}J=>jRj^0?0 z?Fft|6k@9~%owqu46_%+TztgZ17af?=Glww$}rDc?CK2jjK!ui%rg~hWtitDb~wX4 zGqEEX<~fNS%`neJ>^QQ6^KcKW&HeIh)*+6t-7oh;+w;0mlA-NcX$S8+9{ky4HSb#H z=;EnLtoc<6~fqhVKGqdvFrVR z#dW@lIBWKtT&K3@Bo^y>4Z3@*e>HK=75sj5_bJxaM0Z%{TX+s>Fyysc8jN$8|@wJp8vxok?#TQ*dzT^MSBU%YJTN}x-g&m#zGGtYTas=bd2Qc0 zK85^cD4x4}FR$%8D7Jy!Htxl2g1x9*4CbEL3l9DM3F5h20_uJYBfclvp2xEh-wSQ$ z*-U=dsBQicbk}q+&37IXh&k`2VD{tr==Q9A8hI`N6TgDfG|yAe#S{lA*zewwTMMS` zI?S(co_`&-`R((_zaC6H@;?<_OmUd++O+12z??&$SAh90Z$!6t_v0!sYaa#^*Z-wp z_SKt6r0uv5%=hKZVB)?9;nzxjJUV{YVu(GtmQAF%JF~sxOcVQbZ_YXQ_MXKp>&ROny^KhTu11=Y9xDj2<+MTbG%_nyl5i`GfTrT|Hm;4s5|KWoYT?gy8PTE2oVme=xCZ1c%QzOSL5Y2M@Da#73I(XB;1YWW7bIpwS+ z@NZ&!Ue>CQ_olUf3*8=&kNF=!cmBood>dRY{JxX?PU71_Vt*b4my5c;i*BrVU?W`nI^C`bS^o@1=4BhqmyP<`|dVdZs7k&>XKYvf;evg35h2Jld-{O3~1eaUR ziFszfLg!OF4e|bwkNSR%ZeD%jo;r!HpLapj{2O#WWzELu{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_color.bin b/bgfx/shaders/spirv/chains/hlsl/vs_color.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_deconverge.bin b/bgfx/shaders/spirv/chains/hlsl/vs_deconverge.bin index ed52ee7e605880bbf2f28ebf21aaaf2e93858e21..4eb834bbe51536e0a0bbaa4bcd287185dddbd6ba 100644 GIT binary patch delta 994 zcmYk4&r4Kc6ox+;$C=xV5L_Z>5h2o2#h_?Wf;)F1u3OA9cdlEsXya12;6EU^6#XZ% za-~L4W=RWwAgGn%LMM8j%N&^x-Z}4i?>XOl?wPyVT5T=f^bM|e#%uT9r<4|eXC_tC z0CA(3s^MzNx{0!7~igqJ^@&z{CRhy|^R(vJz1CPNLu;wXns^`RS#YC2m?#e*i`yH+( zJl+r;d&PW~w|}7Qf#~=NR}&sP7P{}V4|gtWVy<8Cm`k^P;HfwA0S37bCZ%<%)sfO1nJiHFz*7WY+j9iz8AY9Jj>f!Pmt|mOa8~HJ<#MB+QdN}`st98oVXsnlN zcvaAxN3UyO(z}~}a$SZ&xKz>9!({-jCOn4tT52TS-OSxyP)GDZT#&)lgvSsc&m9tn xwkC#d!mV*=&8_i8CQ~IXp=}ngnj>R=Vk*l-S1Mm2+TEf5nRisG{N7D#=|9@Kcmx0d delta 986 zcmYk4Jxd%>7=^D{H#@^_5tu@^2w@RRl>{OdDx|Zsuuie1>8w+vu(1>d@&^JbCHWE2 zXypfjCMLnc7y^m;B8AySpJ&)Nc;U=F_ssj=^Uh&5+8gcl-cajxf2xtcNhz&?RCcnW zT*z8?w>YS7f;Jchk5WBNvA-=>vSNH&2G&s<>^s0N^;NVc`)=8378850NiYWH(r{J1 z4_9C0WaR-++b_G#;^84|VW75BR#hBv9s&=*F0f`AIMposad|&4Cf>JJtr@^9k-;*2G+=@R&)9tf8UxO%w!fU60Y_eCN<;r5U4Cp^vb?k~7n z^!|pc375T*%^$e)S`+jBg~z=5TH`lFHkVa4|4?*Y1~GLHt{%>PxLU8u<_e~lYIxnk zD7-Gwt+|;^jhDJ~K)4K}sfSA)t|nY=kFlHKk;{WIQCtMj~*UZrb(r+GO5 diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_defocus.bin b/bgfx/shaders/spirv/chains/hlsl/vs_defocus.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_distortion.bin b/bgfx/shaders/spirv/chains/hlsl/vs_distortion.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_ntsc_decode.bin b/bgfx/shaders/spirv/chains/hlsl/vs_ntsc_decode.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_ntsc_encode.bin b/bgfx/shaders/spirv/chains/hlsl/vs_ntsc_encode.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_phosphor.bin b/bgfx/shaders/spirv/chains/hlsl/vs_phosphor.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_post.bin b/bgfx/shaders/spirv/chains/hlsl/vs_post.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_prescale.bin b/bgfx/shaders/spirv/chains/hlsl/vs_prescale.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hlsl/vs_scanline.bin b/bgfx/shaders/spirv/chains/hlsl/vs_scanline.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/hqx/vs_hq2x.bin b/bgfx/shaders/spirv/chains/hqx/vs_hq2x.bin index 9387e8c197e379d77275b6e3d5726ac140b907a9..5d296c4218822ac95a58727ba9a5b00fad5fccd1 100644 GIT binary patch delta 545 zcmYk2y-EW?6oqeyaS@wzYGV_y619wlLP~97@I7LYT7sPjLLiTjUX3aIK`ca2A&5#4 z)MpX=zI8|36hedt0Ti;r4E&dlC_Qz^4_Jn5LcrwG!Bgj5p#8=yh)a z%!3C0HR=$of+esKQ?X1v2kJdM_K$!W>h`TuFCw~m;~WbcHD3O1M3dDl{HoB@eH`kL z0Qasz9q38J-xNCKPrEHNdz&$n|K|?giGC+rY~4d`>oS7pe*m_mvp>T1cy4{}9~9?$ zf*YkLMUVUKtk!r&(VbFW;A$zwno?fjW1uIcO!Aa>l>aFotkqJAbEcF}_yp+LjB@N# fNBy^~w&Ij3M^yhMKc?F8&6U=@)^de!m3e;vVvt7< delta 545 zcmYk2y-EW?6oqeyaS@wzYGV_y619wlLP~97@I7LYT7sPjLLiTj+MlHG2eA-Ag&>MS zP~S!H`_>(Cm$UcGnRCzHnL%|>?QNC5hTFT9?ny-K0iRY>Vw!pi)Jk9{GTw+Ypx3o_i?C0 z0^GX>b)Y8=e^cm`Kkc^A>}|$O{+~N|C;FXiv2_o%t;-0W{{h&N&i)A3@vs&XBMR!VhfvcqyYf5>AkAa?)GRafkQU0fVuvSYc&Y4m^;S-=|Gs>|~ f9rfR`+KN-E98vw3{FrLTH&6hedt0Ti;r4E&dlC_Qz^4_Jn5LcrwG!Bgj5p#8=yh)a z%!3C0HR=$of+esKQ?X1v2kJdM_K$!W>h`TuFCw~m;~WbcHD3O1M3dDl{HoB@eH`kL z0Qasz9q38J-xNCKPrEHNdz&$n|K|?giGC+rY~4d`>oS7pe*m_mvp>T1cy4{}9~9?$ zf*YkLMUVUKtk!r&(VbFW;A$zwno?fjW1uIcO!Aa>l>aFotkqJAbEcF}_yp+LjB@N# fNBy^~w&Ij3M^yhMKc?F8&6U=@)^de!m3e;vVvt7< delta 545 zcmYk2y-EW?6oqeyaS@wzYGV_y619wlLP~97@I7LYT7sPjLLiTj+MlHG2eA-Ag&>MS zP~S!H`_>(Cm$UcGnRCzHnL%|>?QNC5hTFT9?ny-K0iRY>Vw!pi)Jk9{GTw+Ypx3o_i?C0 z0^GX>b)Y8=e^cm`Kkc^A>}|$O{+~N|C;FXiv2_o%t;-0W{{h&N&i)A3@vs&XBMR!VhfvcqyYf5>AkAa?)GRafkQU0fVuvSYc&Y4m^;S-=|Gs>|~ f9rfR`+KN-E98vw3{FrLTH&6hedt0Ti;r4E&dlC_Qz^4_Jn5LcrwG!Bgj5p#8=yh)a z%!3C0HR=$of+esKQ?X1v2kJdM_K$!W>h`TuFCw~m;~WbcHD3O1M3dDl{HoB@eH`kL z0Qasz9q38J-xNCKPrEHNdz&$n|K|?giGC+rY~4d`>oS7pe*m_mvp>T1cy4{}9~9?$ zf*YkLMUVUKtk!r&(VbFW;A$zwno?fjW1uIcO!Aa>l>aFotkqJAbEcF}_yp+LjB@N# fNBy^~w&Ij3M^yhMKc?F8&6U=@)^de!m3e;vVvt7< delta 545 zcmYk2y-EW?6oqeyaS@wzYGV_y619wlLP~97@I7LYT7sPjLLiTj+MlHG2eA-Ag&>MS zP~S!H`_>(Cm$UcGnRCzHnL%|>?QNC5hTFT9?ny-K0iRY>Vw!pi)Jk9{GTw+Ypx3o_i?C0 z0^GX>b)Y8=e^cm`Kkc^A>}|$O{+~N|C;FXiv2_o%t;-0W{{h&N&i)A3@vs&XBMR!VhfvcqyYf5>AkAa?)GRafkQU0fVuvSYc&Y4m^;S-=|Gs>|~ f9rfR`+KN-E98vw3{FrLTH&{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/lcd-grid/vs_persistence.bin b/bgfx/shaders/spirv/chains/lcd-grid/vs_persistence.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/misc/vs_blit.bin b/bgfx/shaders/spirv/chains/misc/vs_blit.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.bin index d8017922e51ec5ae12d1a41fe23c1fef41b910e8..0024dba789ffc05da0accb2766b690c32d0442ab 100644 GIT binary patch delta 405 zcmXw!F>At56oqdvDy0P6s<=57>(t4mLcygj>gFJ{bD@LKsY`I{7>L!<7Riu7#18!h z*&Wm0BlsPCdEv{s@4S2Odp8TRAbRlr{|2G&Tc05v+z`S#YTln{5~JpkliKmkMrbf z=~3@A(AgStP)_mqgjl}T+~uXjPtb>GEkIL{=fHzi_{|oe zT%BFQ1@y_kMc<(XSI{-juF(&WpOB;aC8&pd)wR);S$ryNuu-8B*Z&6=v8xepN>9E% zJ!(b+oqa+9$~iy&tMn0@mU$WR6AU1->gk>>ab_+{dJ{C?zS*kuJns*&Jk2U!s&;zf k4pgq39xW!Q=2QHPj>`B2)z$J}QPur1Ku1HkK5L!(juFN!#Q*>R diff --git a/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.bin index 667da07e71eb1740925895f26a13d96c1fee77ea..b7818d6e2b3d29b745d6cc09e857f3a7e2277914 100644 GIT binary patch delta 405 zcmXw!F>3-r5QXRPJP9J$MX|FIwMvynL9o&0w6hSj4p<0QHb=UY!X+w3EaZwHrpPa_ zw>*E3knibv$G30x&CKr3DR;^(I?m;<8@Ns!p50Lpn%NNa^(}24`U&zJ=vju}>erC7qMSDGK#s`WANkyvxemnx^@^u%9K jyK0&o@rG(X#S?Up#8XsP%b%g@yE4G5hDfDZ^W66jFrF>* delta 405 zcmXw!J!`^H6oya8hlm8+Y;o&UY9}Wb1;M3VQa1;oorMmCPF;eVV=%U&(xGIKQWt+g zcDMBZ6ntJA6Q28?`<`>|y(bUzFu8Mn_xG{q6zRcxjOS)H27N>GEkIL{=fHzi_{|oe zTIDX`0{Yb7qVLdxE9jbM*XRexPpDD<5_E=q^|jHJS$t}2uu-E5*Z&EN*wu(Pr6*sX z9yQ|tgk>>ab_+{dJ{C?zS*kvJns*&=9Dj0PRHqq lJ5al7dK@u9HJ{>VbX3MKsIHd(imLCA0XiDO^;zrOcLWg`EzAG_ diff --git a/bgfx/shaders/spirv/chains/misc/vs_lut.bin b/bgfx/shaders/spirv/chains/misc/vs_lut.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/misc/vs_resize_blit.bin b/bgfx/shaders/spirv/chains/misc/vs_resize_blit.bin new file mode 100644 index 0000000000000000000000000000000000000000..4e55cef0200231fa823be5004830721b6c42c7bb GIT binary patch literal 1609 zcmZvcX=@Wv6ozk;jJ1tRMQrPrnp&(DAqG(qM2#DX7-^(fL9jziqKu}Ql1%EpVBB!S zzvy2OKlnxPeeTR{(&{az_q^{}?>W;hFO{=KXQco0N6L)%{Pm#usM-l1WJZk1U@<#; ze$;&I-wk{1Mz@d}DH@qL+l)!4=0+84vSz#a7PDrLNm-Aq9PlhvmMZyf)X1MWS-@qN zNn1~ByA{cy(rPVeqhFSkB^Ajn$!*DsB&{D$_b&x{iWrXZRBK+go9*CU*jc^U3hNIA z#l}4P;BD}u)}J0WJx|zEog)P3c>1BAnqLoFVaN6lM}IYcE$jwS5UOi9`mHgldKh*Z z1u^5c|6;Qpb)HnipdBstqP1R>zu)q!8=>+Wvv2&@Z+)XGxtPKKdo1HYoAq&X0qvUx!bHEN}C(gbsomsj3V0HwDKbReXsdp#Q zT|O{7!+uKN81G^h9Jt?N`1?I8mKs+i^be-zs}lMJlk>WS{%$CW**}%w!*Sd*>2SQE zs;uOFF2NTY`(lR|lw(2n3kfr4Z`5JdFD3Bbye=iQ+#ea|vhj4gPU-ilTQ9^!vT+UC@x90pT4&LSbA{`FlkaLIr pSCjK=f{*KF*3`iNoH}Rk%mJO9vnzD=OWYr2I!(5;r{5Er{a=j4kRbp7 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/spirv/chains/misc/vs_saturation.bin b/bgfx/shaders/spirv/chains/misc/vs_saturation.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/pillarbox_left_horizontal/vs_gaussian.bin b/bgfx/shaders/spirv/chains/pillarbox_left_horizontal/vs_gaussian.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/pillarbox_left_horizontal/vs_offset_sat.bin b/bgfx/shaders/spirv/chains/pillarbox_left_horizontal/vs_offset_sat.bin index 9810f82694874d624bbe33e6b0757a9002517369..aa81a42a1672cd764e542c887eee4daa54bb55b2 100644 GIT binary patch delta 216 zcmXYry%NDd6opSF2__UuDwP>2kwQaa6bcP93cXi|zXGq2SMf-B5Hr4m-TC(1J$ujY z)=8aI)8O&Sj?uG}v;vQvVl~hc*b88*CQ~|tdwtf29xUlk(F=@V0CPneqF1nA(c}CL te24vxT56+rY4d$#!e$L)$Y7z6&-_BJ_tg2{KcEElCOLCDj9I%X^Z}Ow6K((i delta 216 zcmXYry%NDd6opSF2__UuDwP>2kwQaa6bcP93cW{&zk=}!c@>Y82QlM2*qv|B-Lv=X zZk^OgH4PrG>=->uNh|Q!DOLkLfxQ5>YBHrWxYuWW=)scy6urO*1~6BoA$kS-6+O=1 tz<1d1sHHY~mp0!=CT!L)h71-8`OGimdQYAI{R2u+Z;~^o!{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/pillarbox_left_vertical/vs_offset_sat.bin b/bgfx/shaders/spirv/chains/pillarbox_left_vertical/vs_offset_sat.bin index a4a89bb041a3a03e1fbfa753ad9060e1527f54f0..43fa0fd4eeab725c884b33123699e184f0ce6508 100644 GIT binary patch delta 216 zcmXYry%NDd6opSF2__UuDwP>2kwQaa6bcP93cXi|zXGq2SMf-B5Hr4m-TC(1J$ujY z)=8aI)8O&Sj?uG}v;vQvVl~hc*b88*CQ~|tdwtf29xUlk(F=@V0CPneqF1nA(c}CL te24vxT56+rY4d$#!e$L)$Y7z6&-_BJ_tg2{KcEElCOLCDj9I%X^Z}Ow6K((i delta 216 zcmXYry%NDd6opSF2__UuDwP>2kwQaa6bcP93cW{&zk=}!c@>Y82QlM2*qv|B-Lv=X zZk^OgH4PrG>=->uNh|Q!DOLkLfxQ5>YBHrWxYuWW=)scy6urO*1~6BoA$kS-6+O=1 tz<1d1sHHY~mp0!=CT!L)h71-8`OGimdQYAI{R2u+Z;~^o!{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/pillarbox_right_horizontal/vs_offset_sat.bin b/bgfx/shaders/spirv/chains/pillarbox_right_horizontal/vs_offset_sat.bin index 447093dde119596944016f17f08c9d911e19a30f..0ff1b5f29fb69db80725d7357e97442bdf8c1170 100644 GIT binary patch delta 216 zcmXYqJqp4=6oe-vQHd6ov9bzi=^xlA5iA6oM6mE2;%{NDkgIsK96<0JahGrB?YuX; zP0}RwEU4b|b5vajPp=Is5d#$dwbd delta 216 zcmXYqJqp4=6oe-vF%m5-wXzbl^bgWR6f6XrC|Gz7{|ogBxr#^20R+F1?DFlro%d$9 zN~^S-2CvWT6ur-q*5I{MtOj}kdjS+m*wPg|>s}AKuws6M-e3rQ$Q5aT-obv!jPnoh r8}{33s)atK?f;Vrmko?z4hx0aqYk+~pv$^Gq6GCNnK>QCoE`c{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/pillarbox_right_vertical/vs_offset_sat.bin b/bgfx/shaders/spirv/chains/pillarbox_right_vertical/vs_offset_sat.bin index d11ed4ca88ee4e1fcef78067013fd4d788be206b..25af7b0785d9f3ca180c988e2c9df760ad9e8d5d 100644 GIT binary patch delta 216 zcmXYqJqp4=6oe-vQHd6ov9bzi=^xlA5iA6oM6mE2;%{NDkgIsK96<0JahGrB?YuX; zP0}RwEU4b|b5vajPp=Is5d#$dwbd delta 216 zcmXYqJqp4=6oe-vF%m5-wXzbl^bgWR6f6XrC|Gz7{|ogBxr#^20R+F1?DFlro%d$9 zN~^S-2CvWT6ur-q*5I{MtOj}kdjS+m*wPg|>s}AKuws6M-e3rQ$Q5aT-obv!jPnoh r8}{33s)atK?f;Vrmko?z4hx0aqYk+~pv$^Gq6GCNnK>QCoE`c{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/spirv/chains/warp/vs_dilation-horizontal-fast.bin index 23b146622cb4f05f3e61df833ed80551e559726b..469d10d9b4fdd45b81a9c55ee55b9c291e7601a7 100644 GIT binary patch delta 325 zcmYk2y$-=(7=_QsKc0i4~?J;Ef|_> z9rOV5Lo(`*L2JlYUmrc11@Fch6E!M$`V?%&tjza0_vCBnP+JyIErAS_`5r#aedOm| ma_|2_SG?5NSw-DQjI3ZAG>)3Zc2$ul8xFK-!Q)-wf4l&cKO`am delta 325 zcmYk2yAr`r6h%)a4+VwFtE4eQsn9T^q(NyEN}r+C3CRy&gw}^dlkYKOZNj*jm7TlK zKKGHVl$FA<^SDozo|8t2x7zH?Yylc`^DRI_kmtb63Or_eP*$}%)L=xuiyoi@O&FMG zZ8QS;AsO|@pf%*HuZJGZHt)tN6E!M$`V?%+tjPB{_vCBnP+JyI?E)z%^F4f$`^e9` l=HCB>Zg`2Yvx>Tr7@BKqG>#fUtD?x04g1>E^?8^1A1{DqBm)2d diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin index 40761797c565a81eaf4d34414957c621a89c7632..eefd37ce066a8abbab98bf6a6e79683c77d6079c 100644 GIT binary patch delta 705 zcmYk3J4*vm5QS%r>qbP76h5#_V(iy)#!5YZxv--&zWZaA5lGiT17z1t`>3ibJ*a<~wOK{?$GSCS($+W>m17Fr+i z7>EnNl12Q?PJp!Pje$`xhklxP3Z}pWs93K}63>A6IvUM4fjq=(u0%XHOS*$26dIK9 z;;&&b)d2Zr#);RXrM59p?;4aLq;bpNWIW-YyUjSw#@63G=Z<{K(zR$f9gOnJ_mqo3 z^r|v zw}3RxxsCIC%C=8$lE{~=ibrY)gKtCovUu&cMYhe y5idvIwFj=F7ID^cwnN@bukyu`?n%rZQE#SvpQt^Q9}qSDjqQxAb0Pmje1l(+Kw-}S delta 705 zcmYk3y-EX75QS%n>qbP76#ihD#!Api5)~{JWKEI6$~Um_0fLBV8QIQ45bT2w;a>_P zK?D&Y7C}UdAfiPG`klB}?uL_@IdkUR*}Jt|EmvI$7S2}VFeoNR;b!IB%yxmEl7%)% zya3_?ux=4Qvr8bYdXr!RETf+zUV&LK4Hj*{W{B57d=-u6>p&jjHCG_sm{t0N;}jZ{ zu<_Thm};2(Hs!?Y(NYH(sMiEV2x;8%cPUT!=k8NZv#|~J&v_u5eb<0q7fzZb%h(}lJ!xk11>KXFW1`+n`3X^bC_g1?y2t3e#xo)RqkMy34s2t7 diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin index 40761797c565a81eaf4d34414957c621a89c7632..eefd37ce066a8abbab98bf6a6e79683c77d6079c 100644 GIT binary patch delta 705 zcmYk3J4*vm5QS%r>qbP76h5#_V(iy)#!5YZxv--&zWZaA5lGiT17z1t`>3ibJ*a<~wOK{?$GSCS($+W>m17Fr+i z7>EnNl12Q?PJp!Pje$`xhklxP3Z}pWs93K}63>A6IvUM4fjq=(u0%XHOS*$26dIK9 z;;&&b)d2Zr#);RXrM59p?;4aLq;bpNWIW-YyUjSw#@63G=Z<{K(zR$f9gOnJ_mqo3 z^r|v zw}3RxxsCIC%C=8$lE{~=ibrY)gKtCovUu&cMYhe y5idvIwFj=F7ID^cwnN@bukyu`?n%rZQE#SvpQt^Q9}qSDjqQxAb0Pmje1l(+Kw-}S delta 705 zcmYk3y-EX75QS%n>qbP76#ihD#!Api5)~{JWKEI6$~Um_0fLBV8QIQ45bT2w;a>_P zK?D&Y7C}UdAfiPG`klB}?uL_@IdkUR*}Jt|EmvI$7S2}VFeoNR;b!IB%yxmEl7%)% zya3_?ux=4Qvr8bYdXr!RETf+zUV&LK4Hj*{W{B57d=-u6>p&jjHCG_sm{t0N;}jZ{ zu<_Thm};2(Hs!?Y(NYH(sMiEV2x;8%cPUT!=k8NZv#|~J&v_u5eb<0q7fzZb%h(}lJ!xk11>KXFW1`+n`3X^bC_g1?y2t3e#xo)RqkMy34s2t7 diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin index 40761797c565a81eaf4d34414957c621a89c7632..eefd37ce066a8abbab98bf6a6e79683c77d6079c 100644 GIT binary patch delta 705 zcmYk3J4*vm5QS%r>qbP76h5#_V(iy)#!5YZxv--&zWZaA5lGiT17z1t`>3ibJ*a<~wOK{?$GSCS($+W>m17Fr+i z7>EnNl12Q?PJp!Pje$`xhklxP3Z}pWs93K}63>A6IvUM4fjq=(u0%XHOS*$26dIK9 z;;&&b)d2Zr#);RXrM59p?;4aLq;bpNWIW-YyUjSw#@63G=Z<{K(zR$f9gOnJ_mqo3 z^r|v zw}3RxxsCIC%C=8$lE{~=ibrY)gKtCovUu&cMYhe y5idvIwFj=F7ID^cwnN@bukyu`?n%rZQE#SvpQt^Q9}qSDjqQxAb0Pmje1l(+Kw-}S delta 705 zcmYk3y-EX75QS%n>qbP76#ihD#!Api5)~{JWKEI6$~Um_0fLBV8QIQ45bT2w;a>_P zK?D&Y7C}UdAfiPG`klB}?uL_@IdkUR*}Jt|EmvI$7S2}VFeoNR;b!IB%yxmEl7%)% zya3_?ux=4Qvr8bYdXr!RETf+zUV&LK4Hj*{W{B57d=-u6>p&jjHCG_sm{t0N;}jZ{ zu<_Thm};2(Hs!?Y(NYH(sMiEV2x;8%cPUT!=k8NZv#|~J&v_u5eb<0q7fzZb%h(}lJ!xk11>KXFW1`+n`3X^bC_g1?y2t3e#xo)RqkMy34s2t7 diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass0.bin index f967fec69dc8938ad1316ca14d4329a9ccbb7b76..2749ffbc6f7b0e706052136db58edaa08f5dc8e2 100644 GIT binary patch delta 703 zcmYk3J4*vm6ok(j*Nxan8nw_Sjg=5935j5-O-zy6f8rt{v69HOvJeFO;Ggi7LXC(Z zB0()gP>UdNpHy!bn? z3fTz!GSQ^#(Ndc<(AgCzA;{yGzfN?*zjl*os;$^?f6gtuZq7wh@f}oUF)Qf(?}17- z7^A!csz4sEJtUfZ{*E5u>ZSS)kY_D<|0lRc%HvmfhS$y9PBdA2fv0D_l51wV{~NjP zUS91YkMI8uS3h}t|E}AL^0g0?^yZ)B{%!o`Uug2FyUsP$cm9TVfjqu*&#h+jg@F51 zg`f%PssYY=X!6Wk#?#W%4?C!jo-Mx3sLbK3V2^LOP<1nbWgK#}LHM1>&r)r@ME1n5( zfv{$gerD$aTFxeg31M0KImHX1B+LklHe|DkmjZl48vHGR9`N|eidSYy-#D%UBf{&! zfyJsumEWWsJP%9lr~zkfp&|l}U%r#_3jf?~%HfS|q(A3QdEK0grjvW6*b=S4`#%U+ zwl#+OQK$-NJol7x==>c$E2kHJJZLu4_kU5&NHl(hSLJmxw;xT_-jru&zN=pz-}bmD3N6@85O1QL*+VCcF8!YX3HV^B-~O=*~G)edk~0T>*{n+;bcGVu^2o x127@$3Ut;Jhi1ugwx_h^+WBIcn}9h~WNY#xMdpwnD-PU&&127n`XAFR{{h00V>JK( diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass1.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass1.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass2.bin index 40761797c565a81eaf4d34414957c621a89c7632..eefd37ce066a8abbab98bf6a6e79683c77d6079c 100644 GIT binary patch delta 705 zcmYk3J4*vm5QS%r>qbP76h5#_V(iy)#!5YZxv--&zWZaA5lGiT17z1t`>3ibJ*a<~wOK{?$GSCS($+W>m17Fr+i z7>EnNl12Q?PJp!Pje$`xhklxP3Z}pWs93K}63>A6IvUM4fjq=(u0%XHOS*$26dIK9 z;;&&b)d2Zr#);RXrM59p?;4aLq;bpNWIW-YyUjSw#@63G=Z<{K(zR$f9gOnJ_mqo3 z^r|v zw}3RxxsCIC%C=8$lE{~=ibrY)gKtCovUu&cMYhe y5idvIwFj=F7ID^cwnN@bukyu`?n%rZQE#SvpQt^Q9}qSDjqQxAb0Pmje1l(+Kw-}S delta 705 zcmYk3y-EX75QS%n>qbP76#ihD#!Api5)~{JWKEI6$~Um_0fLBV8QIQ45bT2w;a>_P zK?D&Y7C}UdAfiPG`klB}?uL_@IdkUR*}Jt|EmvI$7S2}VFeoNR;b!IB%yxmEl7%)% zya3_?ux=4Qvr8bYdXr!RETf+zUV&LK4Hj*{W{B57d=-u6>p&jjHCG_sm{t0N;}jZ{ zu<_Thm};2(Hs!?Y(NYH(sMiEV2x;8%cPUT!=k8NZv#|~J&v_u5eb<0q7fzZb%h(}lJ!xk11>KXFW1`+n`3X^bC_g1?y2t3e#xo)RqkMy34s2t7 diff --git a/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass3.bin index 40761797c565a81eaf4d34414957c621a89c7632..eefd37ce066a8abbab98bf6a6e79683c77d6079c 100644 GIT binary patch delta 705 zcmYk3J4*vm5QS%r>qbP76h5#_V(iy)#!5YZxv--&zWZaA5lGiT17z1t`>3ibJ*a<~wOK{?$GSCS($+W>m17Fr+i z7>EnNl12Q?PJp!Pje$`xhklxP3Z}pWs93K}63>A6IvUM4fjq=(u0%XHOS*$26dIK9 z;;&&b)d2Zr#);RXrM59p?;4aLq;bpNWIW-YyUjSw#@63G=Z<{K(zR$f9gOnJ_mqo3 z^r|v zw}3RxxsCIC%C=8$lE{~=ibrY)gKtCovUu&cMYhe y5idvIwFj=F7ID^cwnN@bukyu`?n%rZQE#SvpQt^Q9}qSDjqQxAb0Pmje1l(+Kw-}S delta 705 zcmYk3y-EX75QS%n>qbP76#ihD#!Api5)~{JWKEI6$~Um_0fLBV8QIQ45bT2w;a>_P zK?D&Y7C}UdAfiPG`klB}?uL_@IdkUR*}Jt|EmvI$7S2}VFeoNR;b!IB%yxmEl7%)% zya3_?ux=4Qvr8bYdXr!RETf+zUV&LK4Hj*{W{B57d=-u6>p&jjHCG_sm{t0N;}jZ{ zu<_Thm};2(Hs!?Y(NYH(sMiEV2x;8%cPUT!=k8NZv#|~J&v_u5eb<0q7fzZb%h(}lJ!xk11>KXFW1`+n`3X^bC_g1?y2t3e#xo)RqkMy34s2t7 diff --git a/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv1-noblend.bin index 6e75ff5493a9a0732d3fc1e4bbdc6ea0bdfd4cb3..2a1ee3ea491a0b1357f3c194b0231fe3901ca200 100644 GIT binary patch delta 357 zcmYL^JrBW96oyZuYG5$=SXm^D5+WfnvS2poFYp(-8k-n=4v2`@{3-06C7zd}&C_%5 zd*1i<+$a-e!k+WE_Q$Sso1ffCurM$u4I8javp&R{bUhks#sTUb;Rf=2hd;$S z<)@uvP1%6|=#m#WTjMWW5fuL3_|954l~FydJC?91bvti)<(wQ(25M@kM3Qfo^b3Yd BDS`k1 delta 357 zcmYL^yAA;pVpr>b1i&5t=1P8hn=QUe^yy|5k15NxT>Jo~O zgSxp^psqmr1ds9o=nUz~m8okp{~b)TQBcOsr(qp-3D(bT6cVn~AE&E6K^YMJ7iDU0ayKu@N$i_D$wM?zo=o28pN_Y>?@@dUrsw=Vz{~Ud$X=hi z>E)h3p=|&?nY>vfZ=={_Ie8bYocx)+KK1*_U9?T0XDzC6N!D%uV4}6>m!R?k#rG%w k311xYE4Z^%{{{Ey<-g(fEB^!cgaMy<2Sl~T|D)KCJ7u&?p8x;= delta 1013 zcmZ9K-D(q26ovPgCTR_nf=Vok7E;7s)It?f(H2`o>_v$|1A-!b5Fu13c+rbO-lBKC z^92Ns} zn`rZk_zm=WZxP%E+xRzF|A0Pt1U6$Pp0NG}>c@DjFM%2A*1cdYiWpagT{aeKyvC{A zhyl9}`vzQ1Vd zefD}X)%%&cqz?3C>awZZ4^T|a-X6l$GQ~AhR?wG$o=jP-Qr1xFDeLUjGQ~bKl))llQ9R0g64=lZR;avX$+*)Cdm`{1{MmotDTLou#b=@h(9S*r{L3pU`b zfxfFe`FeDyGXk`B4^0g9_~Aq4Q~te&%G2z?mdkw}(Z^OCCF`RnWPpq#=>E^35x@Hj zT0OdV0Ii=^_j*MuNJVn)0-qABqkEblklnV2qLIM zvF%U(-9`%oaGNh}oLA^Cg^2T)*YLxNrcf;DO zR^j79ldeZYT@s+Z38*5-8(uS_J6!MLk_XjjXNU#6^ diff --git a/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2-noblend.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv3-noblend.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/spirv/chains/xbr/vs_xbr-lv3.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin index d3daa19310fdcaf1f8bb352ac038e2a1586e837b..d527ee5e75abbc80fee69a10ae2c7463bbcf4ac3 100644 GIT binary patch delta 959 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 diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin index 4c3cc75e37dc1e1541a417ae9c993942b213d753..b359a7275e447d951a897fed59a1ddebf465f475 100644 GIT binary patch delta 453 zcmX|+y-EX76ohBVW;=C`_Ij7uId|@yx%VuZi)QaM`hM-+$I-I*i7)ayNteLuTva7-A6SdPnQDB} z0NC3HJ7626_&e|r9DsdrtXOS$1g!V)xPJ_sVcmU)@Pm}E8n@WE(ZZek( z?&U|_65z9Eumtvm$4^Qf`qy4c&AplGt9#z4uT*5oZu(AXOPKY8+A~@=`|PHiV@mB- zdqUK#m?W+A6UCQ@lsUCECs;R!lrQQTn1d5lbPbP-&01^E`Brk+u3rW|^3atk{|(ar E01PxZegFUf delta 453 zcmX|+u}T9$6h-fn&4wTZu~8cflS_AHX5qb}Y(1KINIzS)5ewQ5A4`BfIU3ZL*qErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin index 4c3cc75e37dc1e1541a417ae9c993942b213d753..b359a7275e447d951a897fed59a1ddebf465f475 100644 GIT binary patch delta 453 zcmX|+y-EX76ohBVW;=C`_Ij7uId|@yx%VuZi)QaM`hM-+$I-I*i7)ayNteLuTva7-A6SdPnQDB} z0NC3HJ7626_&e|r9DsdrtXOS$1g!V)xPJ_sVcmU)@Pm}E8n@WE(ZZek( z?&U|_65z9Eumtvm$4^Qf`qy4c&AplGt9#z4uT*5oZu(AXOPKY8+A~@=`|PHiV@mB- zdqUK#m?W+A6UCQ@lsUCECs;R!lrQQTn1d5lbPbP-&01^E`Brk+u3rW|^3atk{|(ar E01PxZegFUf delta 453 zcmX|+u}T9$6h-fn&4wTZu~8cflS_AHX5qb}Y(1KINIzS)5ewQ5A4`BfIU3ZL*q;=C`_Ij7uId|@yx%VuZi)QaM`hM-+$I-I*i7)ayNteLuTva7-A6SdPnQDB} z0NC3HJ7626_&e|r9DsdrtXOS$1g!V)xPJ_sVcmU)@Pm}E8n@WE(ZZek( z?&U|_65z9Eumtvm$4^Qf`qy4c&AplGt9#z4uT*5oZu(AXOPKY8+A~@=`|PHiV@mB- zdqUK#m?W+A6UCQ@lsUCECs;R!lrQQTn1d5lbPbP-&01^E`Brk+u3rW|^3atk{|(ar E01PxZegFUf delta 453 zcmX|+u}T9$6h-fn&4wTZu~8cflS_AHX5qb}Y(1KINIzS)5ewQ5A4`BfIU3ZL*qErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/spirv/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin index b880786f8a47a97e8f034d53b69140a085173ff6..fe4f84b422c2273d9effcdae8c5299066ad22f1b 100644 GIT binary patch delta 587 zcmZvZJxT*%5QZnjHHA&ARIpMjC6;2NlGes}f~epLJV0y&D+%NR@h63fgn;<38xIr@ zAP7EB+?9ZCcrx?7GqW@EZCXyt&E3LBZ*M6n3|c2iz0r<{eel_iB*w9)pjLodl=wxQ zK^u(Cz%*3JU&fw81r}f}#$pkB0qRY1tnYyDP`7Rcdl}If7EW=n(8Q~sKx}cEz`xEk zbsvX1<^{%XU;yUi!*??s^Q-kTZFHeqv@ZRJ+qjWQRrcS+-hmrA*akS9H**ih^1KIp z^JZZ*?~$`H2es}AtX0ozpYbd7|I_3J&EQd1{EA-#^}P5E|G&m5y0N@*AK!ZQ{8PT; mJ5V1c-CWkA7zfx+>$5aJ=jEszVom?z+E=~$V#0qpcH$dGEw0_B^6KD4gJ6p@|nif!N?QhJTr9 z>OKy2$P0{JK_AS?hwo%M=2yGUwBdzr(K_@WY~w~IRoH(Wdk1dhU~AxT-poB1%kv)a z&6|edyhqN)9MrleuvR^-LJ$M)chYhU*2iwXZ}Y{fSQsX^8N diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin index 14c40d9e6285a58921048cbc8a70d8c37eb36ba7..d0fce814f7f1c82270e910a67bee66fc1d3de781 100644 GIT binary patch delta 264 zcmXw!I|{-;7=&lZt|FvJ<)hU`(9Xstf{mb!3Rdv|9>PabsH6rjkL~9F&2K7Yb8L~l>A8;nhYStrNGG~5Fy^s;< zlMog|YE0y3%&4CbogrVn3H1s@Rk6d3iVEI-1FX@i_V?P8ucb@bI1`j)G TlE2-ct;vV^sXCtHKj4$T>Yf|H delta 264 zcmbQwGoNRIC*$gkUePR!t0pgFNw2SBU|?_qVh{*qU}azf($zo=5@Q7700wp-WMHTP zVvt&poFouS0I?%by$+DB1!8R=Rsv#M1{MYlAYBK@~ diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin index 6ff1b372a0e9fe124302782d6f26a72ae1ed0561..f4e4b2d27b9281f3c81a29c96a189fdbb7411ab2 100644 GIT binary patch delta 959 zcmZ9L&q^Cn9EETE6Qe<}T^Ng6ke~~Z+C@-XQ5&R!p{QBJrCszvVhKX&LWFq%-MMh% z#upF@1wrs-tgQvVZ|V<*MvnK~Gv|JD?@ZFG^=c>ErL)V{X1R2l9hX0M?^8B zrZVF%WL83ZX^6j+9*|wHy+RYHNq>d$H(Ew-&{`Tu4aPsn{Dh9{ACU}m*L`5*2HkvN z4evsWCGU!MnN_iUc(XkJcPV`X;I#qrQ)DMLU&fpJiLCOR8Skdy{61AC7b*KvdEFVs zy6gz7=O4rGGrBC!{{nB%v)i@vmA+eki5F)l@Z;G*rQV((vEAixk|*&+>J)Q3LG^l2 zr}5*+PEcp0HtQr(V{fx~v!FNzWsZCX*$K*gPFWx+QWlw;1;u>^G^1&dEoAy5B91O3u!Tt$G^p8P6d7GiOI`FqMv)*|gm6EAEnT!} z(-#PWAPD?0YKi3YT;>OtW_ahk=e_TF?m74BQR}F6+^v27y7{_UJ1IUj_Xp<@afh+{f z;U|%uq|QiPnG}ND@m2B$b9?5}t9yP!)b|4-f_>moaysK+;0SH-RI_MU$UCf`YXfBGNz`Jw-b_gR|% c!h3rCZ+y95{2AUmTt|)nE=;|_?*woA213zH8UO$Q diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin index c347029fcf77a2a7f147c21967de1cbb85cdd4bd..31497730af8506ef6bf0878d2fc6d22ff0b035db 100644 GIT binary patch delta 325 zcmYk2yAASUL}o$QlTMH(jd_(Bz{CI@w&+%A`+e6Kkx$ce9hC- z@4V;zewyTyd^m6(x8cll?$OnoFV|)^1&xXMmO(cl&w;UJdCaz;tZEe~L!W#L-9Zy- z&^6B*=pN*UWYiyk){w8hHX4~N-;E_EYEDcFcvj_+gY$=A@KRxF^}3GSfG_waG* pBR}t)djA)?;Kjzyx{Xk%XRa;KAgX5SMMa)$*wLo0&%40?cmc+kBFF#$ diff --git a/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin index fad1c265ba9afd288fe625a51a07e114be86d7b3..c77d8f7efbe52d3ea00a525d672843041f97f16b 100644 GIT binary patch delta 325 zcmYk2y$-=p7>2(_wSx{Oe8(O@AlvS5~QDVf>9=bORv&Je5H7a=c6l}_>#5~D8`5L-Z#0IJz;Q`8gFMrN`2(_TLXj1-^e0iG+0QCESM!+ip5Vmpwe&&c5~fDuSeo}tHep3zURE( z`<QsKc0i4?RE^S}-)% zI%oj$BQoj_L3_woUmrc1ZL-E13pFZu`V?%&s>J-9d-64OselbsyFdcUd@mp8KJxRf lx%dB|8(wUjtk(#IMpm#D8pch(T~*}8fdd^{@c35vFK<7fA@~3Q diff --git a/bgfx/shaders/spirv/vs_gui.bin b/bgfx/shaders/spirv/vs_gui.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/bgfx/shaders/spirv/vs_screen.bin b/bgfx/shaders/spirv/vs_screen.bin index cb5fd46391fdf1ac7c49c98f3dcfc01b0df116e4..8928835846182d4d13a6a4be02ab08ad700d6965 100644 GIT binary patch delta 144 zcmaFK`I2*jF=O#Y6K{s?1<6SQ zu>=r10@Z5*=>j0u0AhI{wq;;pPzBP3KnxO}08|6gUj)P;GeF{Y49pB(5V6VoShNAE CfDZ5g delta 144 zcmaFK`I2*jF=Nq26K=r10@Z5*>3ks80AhI{wq;;pPzBNjKnxO}08|6gUkJn?GeF{Y49pB(5V6VoShNAB CBM##L diff --git a/hlsl/bloom.fx b/hlsl/bloom.fx index 42c65e6a45b..330d441bb96 100644 --- a/hlsl/bloom.fx +++ b/hlsl/bloom.fx @@ -308,7 +308,7 @@ float3 GetNoiseFactor(float3 n, float random) float4 ps_main(PS_INPUT Input) : COLOR { - float3 texel = tex2D(DiffuseSampler, Input.TexCoord).rgb; + float4 texel = tex2D(DiffuseSampler, Input.TexCoord); float3 texelA = tex2D(BloomSamplerA, Input.BloomCoord.xy).rgb; float3 texelB = tex2D(BloomSamplerB, Input.BloomCoord.xy).rgb; @@ -346,7 +346,7 @@ float4 ps_main(PS_INPUT Input) : COLOR { float3 bloom = float3(0.0f, 0.0f, 0.0f); - texel *= Level0Weight; + texel.rgb *= Level0Weight; if (!VectorScreen) { @@ -381,7 +381,7 @@ float4 ps_main(PS_INPUT Input) : COLOR bloom *= BloomScale; - float3 bloomOverdrive = max(0.0f, texel + bloom - 1.0f) * BloomOverdrive; + float3 bloomOverdrive = max(0.0f, texel.rgb + bloom - 1.0f) * BloomOverdrive; bloom.r += bloomOverdrive.g * 0.5f; bloom.r += bloomOverdrive.b * 0.5f; @@ -393,20 +393,20 @@ float4 ps_main(PS_INPUT Input) : COLOR float2 NoiseCoord = Input.TexCoord; float3 NoiseFactor = GetNoiseFactor(bloom, random(NoiseCoord)); - blend = texel + bloom * NoiseFactor; + blend = texel.rgb + bloom * NoiseFactor; } // darken else { - texelA = min(texel, texelA); - texelB = min(texel, texelB); - texelC = min(texel, texelC); - texelD = min(texel, texelD); - texelE = min(texel, texelE); - texelF = min(texel, texelF); - texelG = min(texel, texelG); - texelH = min(texel, texelH); + texelA = min(texel.rgb, texelA); + texelB = min(texel.rgb, texelB); + texelC = min(texel.rgb, texelC); + texelD = min(texel.rgb, texelD); + texelE = min(texel.rgb, texelE); + texelF = min(texel.rgb, texelF); + texelG = min(texel.rgb, texelG); + texelH = min(texel.rgb, texelH); blend = texel * Level0Weight; blend = lerp(blend, texelA, Level1Weight * BloomScale); @@ -419,7 +419,7 @@ float4 ps_main(PS_INPUT Input) : COLOR blend = lerp(blend, texelH, Level8Weight * BloomScale); } - return float4(blend, 1.0f); + return float4(blend, texel.a); } //----------------------------------------------------------------------------- diff --git a/hlsl/color.fx b/hlsl/color.fx index 79f55260d4f..3c13fc8d400 100644 --- a/hlsl/color.fx +++ b/hlsl/color.fx @@ -52,6 +52,7 @@ struct PS_INPUT uniform float2 ScreenDims; uniform float2 SourceDims; +uniform float3 PrimTint = float3(1.0f, 1.0f, 1.0f); VS_OUTPUT vs_main(VS_INPUT Input) { @@ -67,6 +68,7 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.TexCoord += 0.5f / SourceDims; // half texel offset correction (DX9) Output.Color = Input.Color; + Output.Color.rgb *= PrimTint; return Output; } @@ -102,7 +104,7 @@ float4 ps_main(PS_INPUT Input) : COLOR float3 OutChroma = OutTexel - OutLuma; float3 Saturated = OutLuma + OutChroma * Saturation; - return float4(Saturated, BaseTexel.a); + return float4(Saturated * Input.Color.rgb, BaseTexel.a); } //----------------------------------------------------------------------------- diff --git a/hlsl/deconverge.fx b/hlsl/deconverge.fx index f1cfa8fb686..1262426620e 100644 --- a/hlsl/deconverge.fx +++ b/hlsl/deconverge.fx @@ -108,11 +108,11 @@ VS_OUTPUT vs_main(VS_INPUT Input) float4 ps_main(PS_INPUT Input) : COLOR { - float r = tex2D(DiffuseSampler, float2(Input.TexCoordX.x, Input.TexCoordY.x)).r; - float g = tex2D(DiffuseSampler, float2(Input.TexCoordX.y, Input.TexCoordY.y)).g; - float b = tex2D(DiffuseSampler, float2(Input.TexCoordX.z, Input.TexCoordY.z)).b; + float2 ra = tex2D(DiffuseSampler, float2(Input.TexCoordX.x, Input.TexCoordY.x)).ra; + float2 ga = tex2D(DiffuseSampler, float2(Input.TexCoordX.y, Input.TexCoordY.y)).ga; + float2 ba = tex2D(DiffuseSampler, float2(Input.TexCoordX.z, Input.TexCoordY.z)).ba; - return float4(r, g, b, 1.0f); + return float4(ra.x, ga.x, ba.x, ra.y + ga.y + ba.y); } //----------------------------------------------------------------------------- diff --git a/hlsl/distortion.fx b/hlsl/distortion.fx index 3dd1dbd44b6..29835df368c 100644 --- a/hlsl/distortion.fx +++ b/hlsl/distortion.fx @@ -152,7 +152,7 @@ float GetSpotAddend(float2 coord, float amount) float2 spotOffset = float2(-0.25f, 0.25f); // normalized screen canvas ratio - float2 CanvasRatio = SwapXY + float2 CanvasRatio = SwapXY ? float2(1.0f, QuadDims.x / QuadDims.y) : float2(1.0f, QuadDims.y / QuadDims.x); @@ -284,13 +284,11 @@ float4 ps_main(PS_INPUT Input) : COLOR if (BaseCoord.x < 0.0f - TexelDims.x || BaseCoord.y < 0.0f - TexelDims.y || BaseCoord.x > 1.0f + TexelDims.x || BaseCoord.y > 1.0f + TexelDims.y) { - // we don't use the clip function, because we don't clear the render target before - return float4(0.0f, 0.0f, 0.0f, 1.0f); + discard; } // Color float4 BaseColor = tex2D(DiffuseSampler, BaseCoord); - BaseColor.a = 1.0f; // Vignetting Simulation float2 VignetteCoord = QuadCoord; @@ -332,4 +330,4 @@ technique DefaultTechnique VertexShader = compile vs_3_0 vs_main(); PixelShader = compile ps_3_0 ps_main(); } -} \ No newline at end of file +} diff --git a/hlsl/downsample.fx b/hlsl/downsample.fx index c069b0ad10e..866901cb4fe 100644 --- a/hlsl/downsample.fx +++ b/hlsl/downsample.fx @@ -91,14 +91,12 @@ VS_OUTPUT vs_main(VS_INPUT Input) float4 ps_main(PS_INPUT Input) : COLOR { - float3 texel0 = tex2D(DiffuseSampler, Input.TexCoord01.xy).rgb; - float3 texel1 = tex2D(DiffuseSampler, Input.TexCoord01.zw).rgb; - float3 texel2 = tex2D(DiffuseSampler, Input.TexCoord23.xy).rgb; - float3 texel3 = tex2D(DiffuseSampler, Input.TexCoord23.zw).rgb; + float4 texel0 = tex2D(DiffuseSampler, Input.TexCoord01.xy); + float4 texel1 = tex2D(DiffuseSampler, Input.TexCoord01.zw); + float4 texel2 = tex2D(DiffuseSampler, Input.TexCoord23.xy); + float4 texel3 = tex2D(DiffuseSampler, Input.TexCoord23.zw); - float3 outTexel = (texel0 + texel1 + texel2 + texel3) / 4.0; - - return float4(outTexel, 1.0f); + return (texel0 + texel1 + texel2 + texel3) * 0.25; } //----------------------------------------------------------------------------- diff --git a/hlsl/focus.fx b/hlsl/focus.fx index 6758d51fdc3..4d768890279 100644 --- a/hlsl/focus.fx +++ b/hlsl/focus.fx @@ -82,7 +82,7 @@ uniform float2 Defocus = float2(0.0f, 0.0f); // now this pass is applied only once with offsets of 0.25, 0.55, 1.0, 1.6 to achieve the same appearance as before till a maximum defocus of 2.0 static const float2 CoordOffset8[8] = { - // 0.075x² + 0.225x + 0.25 + // 0.075x� + 0.225x + 0.25 float2(-1.60f, 0.25f), float2(-1.00f, -0.55f), float2(-0.55f, 1.00f), @@ -100,16 +100,13 @@ float4 ps_main(PS_INPUT Input) : COLOR float2 DefocusTexelDims = Defocus * TexelDims; - float3 texel = tex2D(DiffuseSampler, Input.TexCoord).rgb; - float samples = 1.0f; - + float4 texel = tex2D(DiffuseSampler, Input.TexCoord); for (int i = 0; i < 8; i++) { - texel += tex2D(DiffuseSampler, Input.TexCoord + CoordOffset8[i] * DefocusTexelDims).rgb; - samples += 1.0f; + texel += tex2D(DiffuseSampler, Input.TexCoord + CoordOffset8[i] * DefocusTexelDims); } - return float4(texel / samples, 1.0f); + return texel / 9.0f; } //----------------------------------------------------------------------------- diff --git a/hlsl/post.fx b/hlsl/post.fx index ed9dfff9e30..c5d78b8a9b1 100644 --- a/hlsl/post.fx +++ b/hlsl/post.fx @@ -206,14 +206,12 @@ float4 ps_main(PS_INPUT Input) : COLOR // Color float4 BaseColor = tex2D(DiffuseSampler, BaseCoord); - BaseColor.a = 1.0; // clip border if (BaseCoord.x < 0.0 || BaseCoord.y < 0.0 || BaseCoord.x > 1.0 || BaseCoord.y > 1.0) { - // we don't use the clip function, because we don't clear the render target before - return float4(0.0, 0.0, 0.0, 1.0); + discard; } // Color Compression (may not affect bloom) diff --git a/hlsl/prescale.fx b/hlsl/prescale.fx index 3f52c20b464..1529fb08c5a 100644 --- a/hlsl/prescale.fx +++ b/hlsl/prescale.fx @@ -25,6 +25,17 @@ sampler DiffuseSampler = sampler_state AddressW = CLAMP; }; +sampler PointSampler = sampler_state +{ + Texture = ; + MipFilter = POINT; + MinFilter = POINT; + MagFilter = POINT; + AddressU = CLAMP; + AddressV = CLAMP; + AddressW = CLAMP; +}; + //----------------------------------------------------------------------------- // Vertex Definitions //----------------------------------------------------------------------------- @@ -93,6 +104,15 @@ float4 ps_main(PS_INPUT Input) : COLOR return tex2D(DiffuseSampler, TexCoord); } +//----------------------------------------------------------------------------- +// Pre-scale Pixel Shader (point sampling) +//----------------------------------------------------------------------------- + +float4 ps_point_main(PS_INPUT Input) : COLOR +{ + return tex2D(PointSampler, Input.TexCoord); +} + //----------------------------------------------------------------------------- // Pre-scale Technique //----------------------------------------------------------------------------- @@ -107,3 +127,14 @@ technique DefaultTechnique PixelShader = compile ps_3_0 ps_main(); } } + +technique PointTechnique +{ + pass Pass0 + { + Lighting = FALSE; + + VertexShader = compile vs_3_0 vs_main(); + PixelShader = compile ps_3_0 ps_point_main(); + } +} diff --git a/hlsl/primary.fx b/hlsl/primary.fx index 998a4b8716a..73dab1a7cbe 100644 --- a/hlsl/primary.fx +++ b/hlsl/primary.fx @@ -30,6 +30,17 @@ sampler DiffuseSampler = sampler_state AddressW = CLAMP; }; +sampler DiffuseWrapSampler = sampler_state +{ + Texture = ; + MipFilter = LINEAR; + MinFilter = LINEAR; + MagFilter = LINEAR; + AddressU = WRAP; + AddressV = WRAP; + AddressW = WRAP; +}; + sampler2D LutSampler = sampler_state { Texture = ; @@ -181,6 +192,16 @@ float4 ps_ui_main(PS_INPUT Input) : COLOR return BaseTexel; } +float4 ps_ui_wrap_main(PS_INPUT Input) : COLOR +{ + float4 BaseTexel = tex2D(DiffuseWrapSampler, Input.TexCoord); + BaseTexel *= Input.Color; + + if (UiLutEnable) + BaseTexel.rgb = apply_lut(BaseTexel.rgb); + return BaseTexel; +} + //----------------------------------------------------------------------------- // Primary Techniques //----------------------------------------------------------------------------- @@ -217,3 +238,14 @@ technique UiTechnique PixelShader = compile ps_2_0 ps_ui_main(); } } + +technique UiWrapTechnique +{ + pass Pass0 + { + Lighting = FALSE; + + VertexShader = compile vs_2_0 vs_ui_main(); + PixelShader = compile ps_2_0 ps_ui_wrap_main(); + } +} diff --git a/hlsl/scanline.fx b/hlsl/scanline.fx index 5dd4869fe1c..ec9eaa8d9b2 100644 --- a/hlsl/scanline.fx +++ b/hlsl/scanline.fx @@ -116,17 +116,14 @@ float2 GetAdjustedCoords(float2 coord) float4 ps_main(PS_INPUT Input) : COLOR { - float2 BaseCoord = GetAdjustedCoords(Input.TexCoord); - // Color - float4 BaseColor = tex2D(DiffuseSampler, BaseCoord); - BaseColor.a = 1.0f; + float4 BaseColor = tex2D(DiffuseSampler, Input.TexCoord); // clip border - if (BaseCoord.x < 0.0f || BaseCoord.y < 0.0f || - BaseCoord.x > 1.0f || BaseCoord.y > 1.0f) + if (Input.TexCoord.x < 0.0f || Input.TexCoord.y < 0.0f || + Input.TexCoord.x > 1.0f || Input.TexCoord.y > 1.0f) { - // we don't use the clip function, because we don't clear the render target before + // return black for the area outside the screen return float4(0.0f, 0.0f, 0.0f, 1.0f); } @@ -135,7 +132,7 @@ float4 ps_main(PS_INPUT Input) : COLOR float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b; - float ScanlineCoord = BaseCoord.y; + float ScanlineCoord = Input.TexCoord.y; ScanlineCoord += SwapXY ? QuadDims.x <= SourceDims.x * 2.0f ? 0.5f / QuadDims.x // uncenter scanlines if the quad is less than twice the size of the source diff --git a/src/devices/machine/laserdsc.cpp b/src/devices/machine/laserdsc.cpp index 4184e3e7677..34964b27e3b 100644 --- a/src/devices/machine/laserdsc.cpp +++ b/src/devices/machine/laserdsc.cpp @@ -192,8 +192,10 @@ uint32_t laserdisc_device::screen_update(screen_device &screen, bitmap_rgb32 &bi screen.container().empty(); // add the video texture - if (m_videoenable) - screen.container().add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t(0xff,0xff,0xff,0xff), m_videotex, PRIMFLAG_BLENDMODE(BLENDMODE_NONE) | PRIMFLAG_SCREENTEX(1)); + rgb_t videocolor = 0xffffffff; // Fully visible, white + if (!m_videoenable) + videocolor = 0xff000000; // Blank the texture's RGB of the texture + screen.container().add_quad(0.0f, 0.0f, 1.0f, 1.0f, videocolor, m_videotex, PRIMFLAG_BLENDMODE(BLENDMODE_NONE) | PRIMFLAG_SCREENTEX(1)); // add the overlay if (m_overenable && overbitmap.valid()) diff --git a/src/emu/render.cpp b/src/emu/render.cpp index 89281b11dd2..a02f39f841e 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -431,6 +431,7 @@ void render_texture::get_scaled(u32 dwidth, u32 dheight, render_texinfo &texinfo texinfo.base = m_bitmap->raw_pixptr(m_sbounds.top(), m_sbounds.left()); texinfo.rowpixels = m_bitmap->rowpixels(); texinfo.width = swidth; + texinfo.width_margin = m_sbounds.left(); texinfo.height = sheight; // palette will be set later texinfo.seqid = ++m_curseq; diff --git a/src/emu/render.h b/src/emu/render.h index 1229aef4869..2faa5f46394 100644 --- a/src/emu/render.h +++ b/src/emu/render.h @@ -157,6 +157,7 @@ struct render_texinfo void * base; // base of the data u32 rowpixels; // pixels per row u32 width; // width of the image + u32 width_margin; // left margin of the scaled bounds, if applicable u32 height; // height of the image u32 seqid; // sequence ID u64 unique_id; // unique identifier to pass to osd diff --git a/src/osd/modules/render/bgfx/blendreader.cpp b/src/osd/modules/render/bgfx/blendreader.cpp index 9e7ddb17ce3..53cd57a9f4a 100644 --- a/src/osd/modules/render/bgfx/blendreader.cpp +++ b/src/osd/modules/render/bgfx/blendreader.cpp @@ -44,8 +44,11 @@ uint64_t blend_reader::read_from_value(const Value& value) uint64_t equation = get_enum_from_value(value, "equation", BGFX_STATE_BLEND_EQUATION_ADD, EQUATION_NAMES, EQUATION_COUNT); uint64_t srccolor = get_enum_from_value(value, "srcColor", BGFX_STATE_BLEND_ONE, FUNCTION_NAMES, FUNCTION_COUNT); uint64_t dstcolor = get_enum_from_value(value, "dstColor", BGFX_STATE_BLEND_ZERO, FUNCTION_NAMES, FUNCTION_COUNT); - uint64_t srcalpha = get_enum_from_value(value, "srcAlpha", BGFX_STATE_BLEND_ONE, FUNCTION_NAMES, FUNCTION_COUNT); - uint64_t dstalpha = get_enum_from_value(value, "dstAlpha", BGFX_STATE_BLEND_ZERO, FUNCTION_NAMES, FUNCTION_COUNT); - - return BGFX_STATE_BLEND_EQUATION(equation) | BGFX_STATE_BLEND_FUNC_SEPARATE(srccolor, dstcolor, srcalpha, dstalpha); + if (value.HasMember("srcAlpha") && value.HasMember("dstAlpha")) + { + uint64_t srcalpha = get_enum_from_value(value, "srcAlpha", BGFX_STATE_BLEND_ONE, FUNCTION_NAMES, FUNCTION_COUNT); + uint64_t dstalpha = get_enum_from_value(value, "dstAlpha", BGFX_STATE_BLEND_ZERO, FUNCTION_NAMES, FUNCTION_COUNT); + return BGFX_STATE_BLEND_EQUATION(equation) | BGFX_STATE_BLEND_FUNC_SEPARATE(srccolor, dstcolor, srcalpha, dstalpha); + } + return BGFX_STATE_BLEND_EQUATION(equation) | BGFX_STATE_BLEND_FUNC(srccolor, dstcolor); } diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp index b677569a67f..80c688d5014 100644 --- a/src/osd/modules/render/bgfx/chain.cpp +++ b/src/osd/modules/render/bgfx/chain.cpp @@ -78,7 +78,7 @@ void bgfx_chain::repopulate_targets() } } -void bgfx_chain::process(chain_manager::screen_prim &prim, int view, int screen, texture_manager& textures, osd_window& window, uint64_t blend) +void bgfx_chain::process(chain_manager::screen_prim &prim, int view, int screen, texture_manager& textures, osd_window& window) { screen_device_enumerator screen_iterator(window.machine().root_device()); screen_device* screen_device = screen_iterator.byindex(screen); @@ -108,11 +108,12 @@ void bgfx_chain::process(chain_manager::screen_prim &prim, int view, int screen, } int current_view = view; - for (bgfx_chain_entry* entry : m_entries) + for (size_t i = 0; i < m_entries.size(); i++) { - if (!entry->skip()) + if (!m_entries[i]->skip()) { - entry->submit(current_view, prim, textures, screen_count, screen_width, screen_height, screen_scale_x, screen_scale_y, screen_offset_x, screen_offset_y, rotation_type, swap_xy, blend, screen); + m_entries[i]->submit(current_view, prim, textures, screen_count, screen_width, screen_height, screen_scale_x, screen_scale_y, screen_offset_x, screen_offset_y, + rotation_type, swap_xy, screen); current_view++; } } @@ -145,7 +146,7 @@ uint32_t bgfx_chain::applicable_passes() return applicable_passes; } -void bgfx_chain::insert_effect(uint32_t index, bgfx_effect *effect, std::string name, std::string source, chain_manager &chains) +void bgfx_chain::insert_effect(uint32_t index, bgfx_effect *effect, const bool apply_tint, std::string name, std::string source, chain_manager &chains) { auto *clear = new clear_state(BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL, 0, 1.0f, 0); std::vector suppressors; @@ -164,11 +165,15 @@ void bgfx_chain::insert_effect(uint32_t index, bgfx_effect *effect, std::string uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_tex_size1", bgfx::UniformType::Vec4), values, 4)); uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_size0", bgfx::UniformType::Vec4), values, 4)); uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_size1", bgfx::UniformType::Vec4), values, 4)); + uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_tex_bounds0", bgfx::UniformType::Vec4), values, 4)); + uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_tex_bounds1", bgfx::UniformType::Vec4), values, 4)); + uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_bounds0", bgfx::UniformType::Vec4), values, 4)); + uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_bounds1", bgfx::UniformType::Vec4), values, 4)); - m_entries.insert(m_entries.begin() + index, new bgfx_chain_entry(name, effect, clear, suppressors, inputs, uniforms, m_targets, "screen", false)); + m_entries.insert(m_entries.begin() + index, new bgfx_chain_entry(name, effect, clear, suppressors, inputs, uniforms, m_targets, "screen", apply_tint)); const uint32_t screen_width = chains.targets().width(TARGET_STYLE_GUEST, m_screen_index); const uint32_t screen_height = chains.targets().height(TARGET_STYLE_GUEST, m_screen_index); m_targets.destroy_target("screen", m_screen_index); - m_targets.create_target("screen", bgfx::TextureFormat::BGRA8, screen_width, screen_height, TARGET_STYLE_GUEST, true, false, 1, m_screen_index); + m_targets.create_target("screen", bgfx::TextureFormat::BGRA8, screen_width, screen_height, 1, 1, TARGET_STYLE_GUEST, true, false, 1, m_screen_index); } diff --git a/src/osd/modules/render/bgfx/chain.h b/src/osd/modules/render/bgfx/chain.h index b8f5d2db21d..2e86daaef81 100644 --- a/src/osd/modules/render/bgfx/chain.h +++ b/src/osd/modules/render/bgfx/chain.h @@ -30,7 +30,7 @@ public: bgfx_chain(std::string name, std::string author, bool transform, target_manager& targets, std::vector sliders, std::vector params, std::vector entries, std::vector target_list, uint32_t screen_index); ~bgfx_chain(); - void process(chain_manager::screen_prim &prim, int view, int screen, texture_manager& textures, osd_window &window, uint64_t blend = 0L); + void process(chain_manager::screen_prim &prim, int view, int screen, texture_manager& textures, osd_window &window); void repopulate_targets(); // Getters @@ -45,7 +45,7 @@ public: // Setters void set_has_converter(bool has_converter) { m_has_converter = has_converter; } void set_has_adjuster(bool has_adjuster) { m_has_adjuster = has_adjuster; } - void insert_effect(uint32_t index, bgfx_effect *effect, std::string name, std::string source, chain_manager &chains); + void insert_effect(uint32_t index, bgfx_effect *effect, const bool apply_tint, std::string name, std::string source, chain_manager &chains); private: std::string m_name; diff --git a/src/osd/modules/render/bgfx/chainentry.cpp b/src/osd/modules/render/bgfx/chainentry.cpp index 45c0b805882..c3f3ee3a8e3 100644 --- a/src/osd/modules/render/bgfx/chainentry.cpp +++ b/src/osd/modules/render/bgfx/chainentry.cpp @@ -30,7 +30,8 @@ #include "render.h" -bgfx_chain_entry::bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector suppressors, std::vector inputs, std::vector uniforms, target_manager& targets, std::string output, bool apply_tint) +bgfx_chain_entry::bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector suppressors, std::vector inputs, + std::vector uniforms, target_manager& targets, std::string output, bool apply_tint) : m_name(name) , m_effect(effect) , m_clear(clear) @@ -55,12 +56,18 @@ bgfx_chain_entry::~bgfx_chain_entry() delete uniform; } m_uniforms.clear(); - delete m_clear; + if (m_clear) + { + delete m_clear; + } } -void bgfx_chain_entry::submit(int view, chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, uint64_t blend, int32_t screen) +void bgfx_chain_entry::submit(int view, chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, + float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, int32_t screen) { - if (!setup_view(textures, view, screen_width, screen_height, screen)) + uint16_t view_width = screen_width; + uint16_t view_height = screen_height; + if (!setup_view(textures, view, screen_width, screen_height, screen, view_width, view_height)) { return; } @@ -73,18 +80,19 @@ void bgfx_chain_entry::submit(int view, chain_manager::screen_prim &prim, textur uint32_t tint = 0xffffffff; if (m_apply_tint) { - const auto a = (uint8_t)std::round(prim.m_prim->color.a * 255); - const auto r = (uint8_t)std::round(prim.m_prim->color.r * 255); - const auto g = (uint8_t)std::round(prim.m_prim->color.g * 255); - const auto b = (uint8_t)std::round(prim.m_prim->color.b * 255); + const uint8_t a = (uint8_t)std::round(prim.m_prim->color.a * 255); + const uint8_t r = (uint8_t)std::round(prim.m_prim->color.r * 255); + const uint8_t g = (uint8_t)std::round(prim.m_prim->color.g * 255); + const uint8_t b = (uint8_t)std::round(prim.m_prim->color.b * 255); tint = (a << 24) | (b << 16) | (g << 8) | r; } bgfx::TransientVertexBuffer buffer; - put_screen_buffer(prim.m_screen_width, prim.m_screen_height, tint, &buffer); + put_screen_buffer(view_width, view_height, tint, &buffer); bgfx::setVertexBuffer(0, &buffer); - setup_auto_uniforms(prim, textures, screen_count, screen_width, screen_height, screen_scale_x, screen_scale_y, screen_offset_x, screen_offset_y, rotation_type, swap_xy, screen); + setup_auto_uniforms(prim, textures, screen_count, view_width, view_height, screen_width, screen_height, screen_scale_x, screen_scale_y, screen_offset_x, screen_offset_y, + rotation_type, swap_xy, screen); for (bgfx_entry_uniform* uniform : m_uniforms) { @@ -94,7 +102,7 @@ void bgfx_chain_entry::submit(int view, chain_manager::screen_prim &prim, textur } } - m_effect->submit(view, blend); + m_effect->submit(view); if (m_targets.target(screen, m_output) != nullptr) { @@ -102,6 +110,43 @@ void bgfx_chain_entry::submit(int view, chain_manager::screen_prim &prim, textur } } +void bgfx_chain_entry::setup_auto_uniforms(chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t view_width, uint16_t view_height, + uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, + uint32_t rotation_type, bool swap_xy, int32_t screen) +{ + setup_viewsize_uniforms(view_width, view_height); + setup_screensize_uniforms(textures, screen_width, screen_height, screen); + setup_screenscale_uniforms(screen_scale_x, screen_scale_y); + setup_screenoffset_uniforms(screen_offset_x, screen_offset_y); + setup_screencount_uniforms(screen_count); + setup_sourcesize_uniform(prim); + setup_targetsize_uniform(screen); + setup_targetscale_uniform(screen); + setup_rotationtype_uniform(rotation_type); + setup_swapxy_uniform(swap_xy); + setup_quaddims_uniform(prim); + setup_screenindex_uniform(screen); +} + +void bgfx_chain_entry::setup_viewsize_uniforms(uint16_t view_width, uint16_t view_height) +{ + float width(view_width); + float height(view_height); + bgfx_uniform* view_dims = m_effect->uniform("u_view_dims"); + if (view_dims != nullptr) + { + float values[2] = { width, height }; + view_dims->set(values, sizeof(float) * 2); + } + + bgfx_uniform* inv_view_dims = m_effect->uniform("u_inv_view_dims"); + if (inv_view_dims != nullptr) + { + float values[2] = { -1.0f / width, 1.0f / height }; + inv_view_dims->set(values, sizeof(float) * 2); + } +} + void bgfx_chain_entry::setup_screensize_uniforms(texture_manager& textures, uint16_t screen_width, uint16_t screen_height, int32_t screen) { float width = screen_width; @@ -235,22 +280,8 @@ void bgfx_chain_entry::setup_screenindex_uniform(int32_t screen) const } } -void bgfx_chain_entry::setup_auto_uniforms(chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, int32_t screen) -{ - setup_screensize_uniforms(textures, screen_width, screen_height, screen); - setup_screenscale_uniforms(screen_scale_x, screen_scale_y); - setup_screenoffset_uniforms(screen_offset_x, screen_offset_y); - setup_screencount_uniforms(screen_count); - setup_sourcesize_uniform(prim); - setup_targetsize_uniform(screen); - setup_targetscale_uniform(screen); - setup_rotationtype_uniform(rotation_type); - setup_swapxy_uniform(swap_xy); - setup_quaddims_uniform(prim); - setup_screenindex_uniform(screen); -} - -bool bgfx_chain_entry::setup_view(texture_manager &textures, int view, uint16_t screen_width, uint16_t screen_height, int32_t screen) const +bool bgfx_chain_entry::setup_view(texture_manager &textures, int view, uint16_t screen_width, uint16_t screen_height, int32_t screen, + uint16_t &out_view_width, uint16_t &out_view_height) const { bgfx::FrameBufferHandle handle = BGFX_INVALID_HANDLE; uint16_t width = screen_width; @@ -269,11 +300,13 @@ bool bgfx_chain_entry::setup_view(texture_manager &textures, int view, uint16_t bgfx::setViewFrameBuffer(view, handle); bgfx::setViewRect(view, 0, 0, width, height); + out_view_width = width; + out_view_height = height; const bgfx::Caps* caps = bgfx::getCaps(); std::string name = m_inputs[0]->texture() + std::to_string(screen); - const float right_ratio = (float)textures.provider(name)->width() / textures.provider(name)->rowpixels(); + const float right_ratio = float(textures.provider(name)->width()) / textures.provider(name)->rowpixels(); float projMat[16]; bx::mtxOrtho(projMat, 0.0f, right_ratio, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth); @@ -307,14 +340,6 @@ void bgfx_chain_entry::put_screen_buffer(uint16_t screen_width, uint16_t screen_ v[0] = v[1] = 1; v[2] = v[3] = 0; } - else if (renderer_type == bgfx::RendererType::Direct3D9) - { - for (int i = 0; i < 4; i++) - { - u[i] += 0.5f / screen_width; - v[i] += 0.5f / screen_height; - } - } vertex[0].m_x = x[0]; vertex[0].m_y = y[0]; diff --git a/src/osd/modules/render/bgfx/chainentry.h b/src/osd/modules/render/bgfx/chainentry.h index 3fb1dd54ca6..a7504187879 100644 --- a/src/osd/modules/render/bgfx/chainentry.h +++ b/src/osd/modules/render/bgfx/chainentry.h @@ -34,10 +34,12 @@ class target_manager; class bgfx_chain_entry { public: - bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector suppressors, std::vector inputs, std::vector uniforms, target_manager& targets, std::string output, bool apply_tint); + bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector suppressors, std::vector inputs, + std::vector uniforms, target_manager& targets, std::string output, bool apply_tint); ~bgfx_chain_entry(); - void submit(int view, chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, uint64_t blend, int32_t screen); + void submit(int view, chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, + float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, int32_t screen); // Getters std::string name() const { return m_name; } @@ -45,7 +47,10 @@ public: bool skip(); private: - void setup_auto_uniforms(chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, int32_t screen); + void setup_auto_uniforms(chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t view_width, uint16_t view_height, + uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, + uint32_t rotation_type, bool swap_xy, int32_t screen); + void setup_viewsize_uniforms(uint16_t view_width, uint16_t view_height); void setup_screensize_uniforms(texture_manager& textures, uint16_t screen_width, uint16_t screen_height, int32_t screen); void setup_screenscale_uniforms(float screen_scale_x, float screen_scale_y); void setup_screenoffset_uniforms(float screen_offset_x, float screen_offset_y); @@ -58,7 +63,8 @@ private: void setup_quaddims_uniform(chain_manager::screen_prim &prim) const; void setup_screenindex_uniform(int32_t screen) const; - bool setup_view(texture_manager& textures, int view, uint16_t screen_width, uint16_t screen_height, int32_t screen) const; + bool setup_view(texture_manager& textures, int view, uint16_t screen_width, uint16_t screen_height, int32_t screen, + uint16_t &out_view_width, uint16_t &out_view_height) const; void put_screen_buffer(uint16_t screen_width, uint16_t screen_height, uint32_t screen_tint, bgfx::TransientVertexBuffer* buffer) const; std::string m_name; diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp index b4279dc4ed9..6559c346f46 100644 --- a/src/osd/modules/render/bgfx/chainmanager.cpp +++ b/src/osd/modules/render/bgfx/chainmanager.cpp @@ -44,39 +44,58 @@ using namespace rapidjson; +int32_t chain_manager::s_old_chain_selections[16] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; +bool chain_manager::s_reinit_cookie = false; chain_manager::screen_prim::screen_prim(render_primitive *prim) { m_prim = prim; - m_screen_width = (uint16_t)floorf(prim->get_full_quad_width() + 0.5f); - m_screen_height = (uint16_t)floorf(prim->get_full_quad_height() + 0.5f); - m_quad_width = (uint16_t)floorf(prim->get_quad_width() + 0.5f); - m_quad_height = (uint16_t)floorf(prim->get_quad_height() + 0.5f); - m_tex_width = (float)prim->texture.width; - m_tex_height = (float)prim->texture.height; + m_screen_width = uint16_t(floorf(prim->get_full_quad_width() + 0.5f)); + m_screen_height = uint16_t(floorf(prim->get_full_quad_height() + 0.5f)); + m_quad_width = uint16_t(floorf(prim->get_quad_width() + 0.5f)); + m_quad_height = uint16_t(floorf(prim->get_quad_height() + 0.5f)); + m_tex_width = prim->texture.width; + m_tex_height = prim->texture.height; m_rowpixels = prim->texture.rowpixels; m_palette_length = prim->texture.palette_length; m_flags = prim->flags; } -chain_manager::chain_manager(running_machine& machine, osd_options& options, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t window_index, slider_dirty_notifier& slider_notifier) +chain_manager::chain_manager(running_machine& machine, osd_options& options, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t window_index, + slider_dirty_notifier& slider_notifier, uint16_t user_prescale, uint16_t max_prescale_size) : m_machine(machine) , m_options(options) , m_textures(textures) , m_targets(targets) , m_effects(effects) , m_window_index(window_index) + , m_user_prescale(user_prescale) + , m_max_prescale_size(max_prescale_size) , m_slider_notifier(slider_notifier) , m_screen_count(0) + , m_default_chain_index(-1) { m_converters.clear(); refresh_available_chains(); parse_chain_selections(options.bgfx_screen_chains()); init_texture_converters(); + + if (s_reinit_cookie) + { + for (uint32_t i = 0; i < std::size(s_old_chain_selections); i++) + { + set_current_chain(i, s_old_chain_selections[i]); + } + } } chain_manager::~chain_manager() { + for (uint32_t i = 0; i < std::size(s_old_chain_selections); i++) + { + s_old_chain_selections[i] = i < m_current_chain.size() ? m_current_chain[i] : -1; + } + s_reinit_cookie = true; destroy_chains(); } @@ -90,6 +109,20 @@ void chain_manager::init_texture_converters() m_adjuster = m_effects.get_or_load_effect(m_options, "misc/bcg_adjust"); } +void chain_manager::get_default_chain_info(std::string &out_chain_name, int32_t &out_chain_index) +{ + if (m_default_chain_index == -1) + { + out_chain_index = CHAIN_NONE; + out_chain_name = ""; + return; + } + + out_chain_index = m_default_chain_index; + out_chain_name = "default"; + return; +} + void chain_manager::refresh_available_chains() { m_available_chains.clear(); @@ -97,6 +130,16 @@ void chain_manager::refresh_available_chains() const std::string chains_path = util::string_format("%s" PATH_SEPARATOR "chains", m_options.bgfx_path()); find_available_chains(chains_path, ""); + if (m_default_chain_index == -1) + { + for (size_t i = 0; i < m_available_chains.size(); i++) + { + if (m_available_chains[i].m_name == "default") + { + m_default_chain_index = int32_t(i); + } + } + } destroy_unloaded_chains(); } @@ -115,8 +158,7 @@ void chain_manager::destroy_unloaded_chains() { delete m_screen_chains[i]; m_screen_chains[i] = nullptr; - m_chain_names[i] = ""; - m_current_chain[i] = CHAIN_NONE; + get_default_chain_info(m_chain_names[i], m_current_chain[i]); break; } } @@ -203,7 +245,7 @@ bgfx_chain* chain_manager::load_chain(std::string name, uint32_t screen_index) return nullptr; } - bgfx_chain* chain = chain_reader::read_from_value(document, name + ": ", *this, screen_index); + bgfx_chain* chain = chain_reader::read_from_value(document, name + ": ", *this, screen_index, m_user_prescale, m_max_prescale_size); if (chain == nullptr) { @@ -323,7 +365,7 @@ bgfx_chain* chain_manager::screen_chain(uint32_t screen) void chain_manager::process_screen_quad(uint32_t view, uint32_t screen, screen_prim &prim, osd_window& window) { - const bool any_targets_rebuilt = m_targets.update_target_sizes(screen, prim.m_tex_width, prim.m_tex_height, TARGET_STYLE_GUEST); + const bool any_targets_rebuilt = m_targets.update_target_sizes(screen, prim.m_tex_width, prim.m_tex_height, TARGET_STYLE_GUEST, m_user_prescale, m_max_prescale_size); if (any_targets_rebuilt) { for (bgfx_chain* chain : m_screen_chains) @@ -336,7 +378,7 @@ void chain_manager::process_screen_quad(uint32_t view, uint32_t screen, screen_p } bgfx_chain* chain = screen_chain(screen); - chain->process(prim, view, screen, m_textures, window, bgfx_util::get_blend_state(PRIMFLAG_GET_BLENDMODE(prim.m_flags))); + chain->process(prim, view, screen, m_textures, window); view += chain->applicable_passes(); } @@ -363,7 +405,7 @@ uint32_t chain_manager::count_screens(render_primitive* prim) if (screen_count > 0) { update_screen_count(screen_count); - m_targets.update_screen_count(screen_count); + m_targets.update_screen_count(screen_count, m_user_prescale, m_max_prescale_size); } if (screen_count < m_screen_prims.size()) @@ -385,8 +427,12 @@ void chain_manager::update_screen_count(uint32_t screen_count) while (m_screen_chains.size() < m_screen_count) { m_screen_chains.push_back(nullptr); - m_chain_names.push_back(""); - m_current_chain.push_back(CHAIN_NONE); + + int32_t chain_index = CHAIN_NONE; + std::string chain_name = ""; + get_default_chain_info(chain_name, chain_index); + m_chain_names.push_back(chain_name); + m_current_chain.push_back(chain_index); } // Ensure we have a screen chain selection slider per screen @@ -399,11 +445,20 @@ void chain_manager::update_screen_count(uint32_t screen_count) } } +void chain_manager::set_current_chain(uint32_t screen, int32_t chain_index) +{ + if (chain_index < m_available_chains.size() && screen < m_current_chain.size() && screen < m_chain_names.size()) + { + m_current_chain[screen] = chain_index; + m_chain_names[screen] = m_available_chains[chain_index].m_name; + } +} + int32_t chain_manager::slider_changed(int id, std::string *str, int32_t newval) { if (newval != SLIDER_NOCHANGE) { - m_current_chain[id] = newval; + set_current_chain(id, newval); std::vector> settings = slider_settings(); reload_chains(); @@ -485,24 +540,24 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive * int width_div_factor = 1; int width_mul_factor = 1; const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, prim.m_flags & PRIMFLAG_TEXFORMAT_MASK, - prim.m_rowpixels, tex_height, prim.m_prim->texture.palette, prim.m_prim->texture.base, pitch, width_div_factor, width_mul_factor); + prim.m_rowpixels, prim.m_prim->texture.width_margin, tex_height, prim.m_prim->texture.palette, prim.m_prim->texture.base, pitch, width_div_factor, width_mul_factor); if (texture == nullptr) { uint32_t flags = BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT; if (!PRIMFLAG_GET_TEXWRAP(prim.m_flags)) flags |= BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP; - bgfx_texture *texture = new bgfx_texture(full_name, dst_format, tex_width, tex_height, mem, flags, pitch, prim.m_rowpixels, width_div_factor, width_mul_factor); + bgfx_texture *texture = new bgfx_texture(full_name, dst_format, tex_width, prim.m_prim->texture.width_margin, tex_height, mem, flags, pitch, prim.m_rowpixels, width_div_factor, width_mul_factor); m_textures.add_provider(full_name, texture); if (prim.m_prim->texture.palette) { - uint16_t palette_width = (uint16_t)std::min(prim.m_palette_length, 256U); - uint16_t palette_height = (uint16_t)std::max((prim.m_palette_length + 255) / 256, 1U); + uint16_t palette_width = uint16_t(std::min(prim.m_palette_length, 256U)); + uint16_t palette_height = uint16_t(std::max((prim.m_palette_length + 255) / 256, 1U)); m_palette_temp.resize(palette_width * palette_height * 4); memcpy(&m_palette_temp[0], prim.m_prim->texture.palette, prim.m_palette_length * 4); const bgfx::Memory *palmem = bgfx::copy(&m_palette_temp[0], palette_width * palette_height * 4); - palette = new bgfx_texture(palette_name, bgfx::TextureFormat::BGRA8, palette_width, palette_height, palmem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, palette_width * 4); + palette = new bgfx_texture(palette_name, bgfx::TextureFormat::BGRA8, palette_width, 0, palette_height, palmem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, palette_width * 4); m_textures.add_provider(palette_name, palette); } @@ -523,12 +578,12 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive * } else { - texture->update(mem, pitch); + texture->update(mem, pitch, prim.m_prim->texture.width_margin); if (prim.m_prim->texture.palette) { - uint16_t palette_width = (uint16_t)std::min(prim.m_palette_length, 256U); - uint16_t palette_height = (uint16_t)std::max((prim.m_palette_length + 255) / 256, 1U); + uint16_t palette_width = uint16_t(std::min(prim.m_palette_length, 256U)); + uint16_t palette_height = uint16_t(std::max((prim.m_palette_length + 255) / 256, 1U)); const uint32_t palette_size = palette_width * palette_height * 4; m_palette_temp.resize(palette_size); memcpy(&m_palette_temp[0], prim.m_prim->texture.palette, prim.m_palette_length * 4); @@ -540,7 +595,7 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive * } else { - palette = new bgfx_texture(palette_name, bgfx::TextureFormat::BGRA8, palette_width, palette_height, palmem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, palette_width * 4); + palette = new bgfx_texture(palette_name, bgfx::TextureFormat::BGRA8, palette_width, 0, palette_height, palmem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, palette_width * 4); m_textures.add_provider(palette_name, palette); while (screen >= m_screen_palettes.size()) { @@ -551,15 +606,17 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive * } } + const bool has_tint = (prim.m_prim->color.a != 1.0f) || (prim.m_prim->color.r != 1.0f) || (prim.m_prim->color.g != 1.0f) || (prim.m_prim->color.b != 1.0f); bgfx_chain* chain = screen_chain(screen); if (chain && needs_adjust && !chain->has_adjuster()) { - chain->insert_effect(chain->has_converter() ? 1 : 0, m_adjuster, "XXadjust", needs_conversion ? "screen" : "source", *this); + const bool apply_tint = !needs_conversion && has_tint; + chain->insert_effect(chain->has_converter() ? 1 : 0, m_adjuster, apply_tint, "XXadjust", needs_conversion ? "screen" : "source", *this); chain->set_has_adjuster(true); } if (chain && needs_conversion && !chain->has_converter()) { - chain->insert_effect(0, m_converters[src_format], "XXconvert", "source", *this); + chain->insert_effect(0, m_converters[src_format], has_tint, "XXconvert", "source", *this); chain->set_has_converter(true); } } @@ -587,7 +644,7 @@ uint32_t chain_manager::process_screen_chains(uint32_t view, osd_window& window) std::swap(screen_width, screen_height); } - const bool any_targets_rebuilt = m_targets.update_target_sizes(screen_index, screen_width, screen_height, TARGET_STYLE_NATIVE); + const bool any_targets_rebuilt = m_targets.update_target_sizes(screen_index, screen_width, screen_height, TARGET_STYLE_NATIVE, m_user_prescale, m_max_prescale_size); if (any_targets_rebuilt) { for (bgfx_chain* chain : m_screen_chains) diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h index 01e567653b8..e63fa9d6db5 100644 --- a/src/osd/modules/render/bgfx/chainmanager.h +++ b/src/osd/modules/render/bgfx/chainmanager.h @@ -63,14 +63,15 @@ public: uint16_t m_screen_height = 0; uint16_t m_quad_width = 0; uint16_t m_quad_height = 0; - float m_tex_width = 0.0F; - float m_tex_height = 0.0F; + float m_tex_width = 0.0f; + float m_tex_height = 0.0f; int m_rowpixels = 0; uint32_t m_palette_length = 0; uint32_t m_flags = 0; }; - chain_manager(running_machine& machine, osd_options& options, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t window_index, slider_dirty_notifier& slider_notifier); + chain_manager(running_machine& machine, osd_options& options, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t window_index, + slider_dirty_notifier& slider_notifier, uint16_t user_prescale, uint16_t max_prescale_size); ~chain_manager(); uint32_t update_screen_textures(uint32_t view, render_primitive *starting_prim, osd_window& window); @@ -104,6 +105,7 @@ private: void init_texture_converters(); + void get_default_chain_info(std::string &out_chain_name, int32_t &out_chain_index); void refresh_available_chains(); void destroy_unloaded_chains(); void find_available_chains(std::string root, std::string path); @@ -112,6 +114,7 @@ private: void update_screen_count(uint32_t screen_count); + void set_current_chain(uint32_t screen, int32_t chain_index); int32_t slider_changed(int id, std::string *str, int32_t newval); void create_selection_slider(uint32_t screen_index); bool needs_sliders(); @@ -125,8 +128,11 @@ private: target_manager& m_targets; effect_manager& m_effects; uint32_t m_window_index; + uint16_t m_user_prescale; + uint16_t m_max_prescale_size; slider_dirty_notifier& m_slider_notifier; uint32_t m_screen_count; + int32_t m_default_chain_index; std::vector m_available_chains; std::vector m_screen_chains; std::vector m_chain_names; @@ -140,6 +146,9 @@ private: std::vector m_screen_prims; std::vector m_palette_temp; + static int32_t s_old_chain_selections[16]; + static bool s_reinit_cookie; + static inline constexpr uint32_t CHAIN_NONE = 0; }; diff --git a/src/osd/modules/render/bgfx/chainreader.cpp b/src/osd/modules/render/bgfx/chainreader.cpp index 92e30df0b33..7d92c641695 100644 --- a/src/osd/modules/render/bgfx/chainreader.cpp +++ b/src/osd/modules/render/bgfx/chainreader.cpp @@ -22,7 +22,7 @@ #include "slider.h" #include "parameter.h" -bgfx_chain* chain_reader::read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index) +bgfx_chain* chain_reader::read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index, uint16_t user_prescale, uint16_t max_prescale_size) { if (!validate_parameters(value, prefix)) { @@ -96,7 +96,7 @@ bgfx_chain* chain_reader::read_from_value(const Value& value, std::string prefix // TODO: Move into its own reader for (uint32_t i = 0; i < target_array.Size(); i++) { - bgfx_target* target = target_reader::read_from_value(target_array[i], prefix + "targets[" + std::to_string(i) + "]: ", chains, screen_index); + bgfx_target* target = target_reader::read_from_value(target_array[i], prefix + "targets[" + std::to_string(i) + "]: ", chains, screen_index, user_prescale, max_prescale_size); if (target == nullptr) { return nullptr; diff --git a/src/osd/modules/render/bgfx/chainreader.h b/src/osd/modules/render/bgfx/chainreader.h index a2fa3ba28a5..6201409edfa 100644 --- a/src/osd/modules/render/bgfx/chainreader.h +++ b/src/osd/modules/render/bgfx/chainreader.h @@ -19,7 +19,7 @@ class chain_manager; class chain_reader : public state_reader { public: - static bgfx_chain* read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index); + static bgfx_chain* read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index, uint16_t user_prescale, uint16_t max_prescale_size); private: static bool validate_parameters(const Value& value, std::string prefix); diff --git a/src/osd/modules/render/bgfx/effect.cpp b/src/osd/modules/render/bgfx/effect.cpp index c5ea8555dce..a7f69e326f9 100644 --- a/src/osd/modules/render/bgfx/effect.cpp +++ b/src/osd/modules/render/bgfx/effect.cpp @@ -13,8 +13,9 @@ #include "modules/osdmodule.h" #include "osdcore.h" -bgfx_effect::bgfx_effect(uint64_t state, bgfx::ShaderHandle vertex_shader, bgfx::ShaderHandle fragment_shader, std::vector uniforms) - : m_state(state) +bgfx_effect::bgfx_effect(std::string name, uint64_t state, bgfx::ShaderHandle vertex_shader, bgfx::ShaderHandle fragment_shader, std::vector uniforms) + : m_name(name) + , m_state(state) { m_program_handle = bgfx::createProgram(vertex_shader, fragment_shader, false); @@ -47,7 +48,10 @@ void bgfx_effect::submit(int view, uint64_t blend) { (uniform_pair.second)->upload(); } - bgfx::setState(m_state | blend); + + const uint64_t final_state = (blend != ~0ULL) ? ((m_state & ~BGFX_STATE_BLEND_MASK) | blend) : m_state; + + bgfx::setState(final_state); bgfx::submit(view, m_program_handle); } diff --git a/src/osd/modules/render/bgfx/effect.h b/src/osd/modules/render/bgfx/effect.h index ca1be77c73d..6dd88b3585c 100644 --- a/src/osd/modules/render/bgfx/effect.h +++ b/src/osd/modules/render/bgfx/effect.h @@ -22,14 +22,15 @@ class bgfx_uniform; class bgfx_effect { public: - bgfx_effect(uint64_t state, bgfx::ShaderHandle vertex_shader, bgfx::ShaderHandle fragment_shader, std::vector uniforms); + bgfx_effect(std::string name, uint64_t state, bgfx::ShaderHandle vertex_shader, bgfx::ShaderHandle fragment_shader, std::vector uniforms); ~bgfx_effect(); - void submit(int view, uint64_t blend = 0L); + void submit(int view, uint64_t blend = ~0ULL); bgfx_uniform *uniform(std::string name); bool is_valid() { return m_program_handle.idx != bgfx::kInvalidHandle; } private: + std::string m_name; uint64_t m_state; bgfx::ProgramHandle m_program_handle; std::map m_uniforms; diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp index ba86e00adf0..1a29d743cfb 100644 --- a/src/osd/modules/render/bgfx/effectmanager.cpp +++ b/src/osd/modules/render/bgfx/effectmanager.cpp @@ -93,7 +93,7 @@ bgfx_effect* effect_manager::load_effect(osd_options &options, std::string name) return nullptr; } - bgfx_effect* effect = effect_reader::read_from_value(document, "Effect '" + name + "': ", options, m_shaders); + bgfx_effect* effect = effect_reader::read_from_value(name, document, "Effect '" + name + "': ", options, m_shaders); if (effect == nullptr) { diff --git a/src/osd/modules/render/bgfx/effectreader.cpp b/src/osd/modules/render/bgfx/effectreader.cpp index 36acee2f9ea..f65eb9f97ae 100644 --- a/src/osd/modules/render/bgfx/effectreader.cpp +++ b/src/osd/modules/render/bgfx/effectreader.cpp @@ -17,7 +17,7 @@ #include "uniformreader.h" #include "uniform.h" -bgfx_effect *effect_reader::read_from_value(const Value& value, std::string prefix, osd_options &options, shader_manager& shaders) +bgfx_effect *effect_reader::read_from_value(std::string name, const Value& value, std::string prefix, osd_options &options, shader_manager& shaders) { uint64_t flags = 0; std::string vertex_name; @@ -37,7 +37,7 @@ bgfx_effect *effect_reader::read_from_value(const Value& value, std::string pref return nullptr; } - bgfx_effect *effect = new bgfx_effect(flags, vertex_shader, fragment_shader, uniforms); + bgfx_effect *effect = new bgfx_effect(name, flags, vertex_shader, fragment_shader, uniforms); if (effect->is_valid()) { return effect; diff --git a/src/osd/modules/render/bgfx/effectreader.h b/src/osd/modules/render/bgfx/effectreader.h index 095f06a56ea..9ecffda51f3 100644 --- a/src/osd/modules/render/bgfx/effectreader.h +++ b/src/osd/modules/render/bgfx/effectreader.h @@ -26,7 +26,7 @@ class shader_manager; class effect_reader : public state_reader { public: - static bgfx_effect *read_from_value(const Value& value, std::string prefix, osd_options &options, shader_manager& shaders); + static bgfx_effect *read_from_value(std::string name, const Value& value, std::string prefix, osd_options &options, shader_manager& shaders); static bool validate_value(const Value& value, std::string prefix, osd_options &options); private: diff --git a/src/osd/modules/render/bgfx/inputpair.cpp b/src/osd/modules/render/bgfx/inputpair.cpp index db12144e952..154252db04f 100644 --- a/src/osd/modules/render/bgfx/inputpair.cpp +++ b/src/osd/modules/render/bgfx/inputpair.cpp @@ -56,20 +56,31 @@ void bgfx_input_pair::bind(bgfx_effect *effect, const int32_t screen) const if (!provider) return; + float rowpixels(provider->rowpixels()); + float width_margin(provider->width_margin()); + float height(provider->height()); + bgfx_uniform *tex_size = effect->uniform("u_tex_size" + std::to_string(m_index)); if (tex_size && provider) { - float values[2] = { float(provider->rowpixels()), float(provider->height()) }; + float values[2] = { rowpixels, height }; tex_size->set(values, sizeof(float) * 2); } bgfx_uniform *inv_tex_size = effect->uniform("u_inv_tex_size" + std::to_string(m_index)); if (inv_tex_size && provider) { - float values[2] = { 1.0f / float(provider->rowpixels()), 1.0f / float(provider->height()) }; + float values[2] = { 1.0f / rowpixels, 1.0f / height }; inv_tex_size->set(values, sizeof(float) * 2); } + bgfx_uniform *tex_bounds = effect->uniform("u_tex_bounds" + std::to_string(m_index)); + if (tex_bounds && provider) + { + float values[4] = { width_margin / rowpixels, 0.0f, 1.0f + width_margin / rowpixels, 1.0f }; + tex_bounds->set(values, sizeof(float) * 4); + } + bgfx::setTexture(m_index, effect->uniform(m_sampler)->handle(), chains().textures().handle(name)); } 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 index 1b967f894d4..40b0947da38 100644 --- 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 @@ -32,10 +32,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_color0 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc index 72705bdcb83..5b8a633a642 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc @@ -28,9 +28,9 @@ uniform vec4 rasterbloom; uniform vec4 blurwidth; -vec3 texblur(vec2 c) +vec4 texblur(vec2 c) { - vec3 col = pow(texture2D(blur_texture,c).rgb, vec3_splat(CRTgamma.x)); + vec4 col = pow(texture2D(blur_texture,c), vec4(vec3_splat(CRTgamma.x),1.0)); // taper the blur texture outside its border with a gaussian float w = blurwidth.x / 320.0; c = min(c, vec2_splat(1.0)-c) * aspect.xy * vec2_splat(1.0/w); @@ -38,7 +38,7 @@ vec3 texblur(vec2 c) // approximation of erf gives smooth step // (convolution of gaussian with step) c = (step(0.0,c)-vec2_splat(0.5)) * sqrt(vec2_splat(1.0)-e2c) * (vec2_splat(1.0) + vec2_splat(0.1749)*e2c) + vec2_splat(0.5); - return col * vec3_splat( c.x * c.y ); + return col * vec4_splat( c.x * c.y ); } void main() @@ -125,16 +125,16 @@ void main() weights_prev=weights_prev+scanlineWeights(uv_ratio.y+1.0, col_prev)/3.0; weights_next=weights_next+scanlineWeights(uv_ratio.y-1.0, col_next)/3.0; #endif - vec3 mul_res = (col * weights + col_prev * weights_prev + col_next * weights_next).rgb; + vec4 mul_res = col * weights + col_prev * weights_prev + col_next * weights_next; // halation and corners - vec3 blur = texblur(xy0); + vec4 blur = texblur(xy0); // include factor of rbloom: // (probably imperceptible) brightness reduction when raster grows - mul_res = mix(mul_res, blur, halation.x) * vec3_splat(cval*rbloom); + mul_res = mix(mul_res, blur, halation.x) * vec4_splat(cval*rbloom); // Shadow mask - vec3 cout = apply_shadow_mask(v_texCoord.xy, mul_res); + vec3 cout = apply_shadow_mask(v_texCoord.xy, mul_res.rgb); // Convert the image gamma for display on our output device. cout = linear_to_output(cout); diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc index c096ebca7e0..9ff0da25057 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc @@ -90,13 +90,13 @@ void main() weights=weights+scanlineWeights(abs(uv_ratio.y), col)/3.0; weights2=weights2+scanlineWeights(abs(1.0-uv_ratio.y), col2)/3.0; #endif - vec3 mul_res = (col * weights + col2 * weights2).rgb * vec3_splat(cval); + vec4 mul_res = col * weights + col2 * weights2 * vec4_splat(cval); // Shadow mask - vec3 cout = apply_shadow_mask(v_texCoord.xy, mul_res); + vec3 cout = apply_shadow_mask(v_texCoord.xy, mul_res.rgb); // Convert the image gamma for display on our output device. cout = linear_to_output(cout); - gl_FragColor = vec4(cout,1.0); + gl_FragColor = vec4(cout,mul_res.a); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc index 74faf15a740..6290ae330eb 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc @@ -6,33 +6,33 @@ uniform vec4 u_gamma; uniform vec4 u_tex_size0; SAMPLER2D(s_tex, 0); -#define TEX2D(v) pow(texture2D(s_tex, v).rgb, vec3_splat(u_gamma.x)) +#define TEX2D(v) pow(texture2D(s_tex, v), vec4(vec3_splat(u_gamma.x), 1.0)) void main() { - vec3 sum = vec3_splat(0.0); + vec4 sum = vec4_splat(0.0); float onex = 1.0/u_tex_size0.x; - sum += TEX2D(v_texCoord + vec2(-8.0 * onex, 0.0)) * vec3_splat(v_coeffs2.w); - sum += TEX2D(v_texCoord + vec2(-7.0 * onex, 0.0)) * vec3_splat(v_coeffs2.z); - sum += TEX2D(v_texCoord + vec2(-6.0 * onex, 0.0)) * vec3_splat(v_coeffs2.y); - sum += TEX2D(v_texCoord + vec2(-5.0 * onex, 0.0)) * vec3_splat(v_coeffs2.x); - sum += TEX2D(v_texCoord + vec2(-4.0 * onex, 0.0)) * vec3_splat(v_coeffs.w); - sum += TEX2D(v_texCoord + vec2(-3.0 * onex, 0.0)) * vec3_splat(v_coeffs.z); - sum += TEX2D(v_texCoord + vec2(-2.0 * onex, 0.0)) * vec3_splat(v_coeffs.y); - sum += TEX2D(v_texCoord + vec2(-1.0 * onex, 0.0)) * vec3_splat(v_coeffs.x); + sum += TEX2D(v_texCoord + vec2(-8.0 * onex, 0.0)) * vec4_splat(v_coeffs2.w); + sum += TEX2D(v_texCoord + vec2(-7.0 * onex, 0.0)) * vec4_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(-6.0 * onex, 0.0)) * vec4_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(-5.0 * onex, 0.0)) * vec4_splat(v_coeffs2.x); + sum += TEX2D(v_texCoord + vec2(-4.0 * onex, 0.0)) * vec4_splat(v_coeffs.w); + sum += TEX2D(v_texCoord + vec2(-3.0 * onex, 0.0)) * vec4_splat(v_coeffs.z); + sum += TEX2D(v_texCoord + vec2(-2.0 * onex, 0.0)) * vec4_splat(v_coeffs.y); + sum += TEX2D(v_texCoord + vec2(-1.0 * onex, 0.0)) * vec4_splat(v_coeffs.x); sum += TEX2D(v_texCoord); - sum += TEX2D(v_texCoord + vec2(+1.0 * onex, 0.0)) * vec3_splat(v_coeffs.x); - sum += TEX2D(v_texCoord + vec2(+2.0 * onex, 0.0)) * vec3_splat(v_coeffs.y); - sum += TEX2D(v_texCoord + vec2(+3.0 * onex, 0.0)) * vec3_splat(v_coeffs.z); - sum += TEX2D(v_texCoord + vec2(+4.0 * onex, 0.0)) * vec3_splat(v_coeffs.w); - sum += TEX2D(v_texCoord + vec2(+5.0 * onex, 0.0)) * vec3_splat(v_coeffs2.x); - sum += TEX2D(v_texCoord + vec2(+6.0 * onex, 0.0)) * vec3_splat(v_coeffs2.y); - sum += TEX2D(v_texCoord + vec2(+7.0 * onex, 0.0)) * vec3_splat(v_coeffs2.z); - sum += TEX2D(v_texCoord + vec2(+8.0 * onex, 0.0)) * vec3_splat(v_coeffs2.w); + sum += TEX2D(v_texCoord + vec2(+1.0 * onex, 0.0)) * vec4_splat(v_coeffs.x); + sum += TEX2D(v_texCoord + vec2(+2.0 * onex, 0.0)) * vec4_splat(v_coeffs.y); + sum += TEX2D(v_texCoord + vec2(+3.0 * onex, 0.0)) * vec4_splat(v_coeffs.z); + sum += TEX2D(v_texCoord + vec2(+4.0 * onex, 0.0)) * vec4_splat(v_coeffs.w); + sum += TEX2D(v_texCoord + vec2(+5.0 * onex, 0.0)) * vec4_splat(v_coeffs2.x); + sum += TEX2D(v_texCoord + vec2(+6.0 * onex, 0.0)) * vec4_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(+7.0 * onex, 0.0)) * vec4_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(+8.0 * onex, 0.0)) * vec4_splat(v_coeffs2.w); float norm = 1.0 / (1.0 + 2.0*(v_coeffs.x+v_coeffs.y+v_coeffs.z+v_coeffs.w +v_coeffs2.x+v_coeffs2.y+v_coeffs2.z+v_coeffs2.w)); - gl_FragColor = vec4( pow(sum*vec3_splat(norm), vec3_splat(1.0/u_gamma.x)), 1.0 ); + gl_FragColor = pow(sum*vec4_splat(norm), vec4(vec3_splat(1.0/u_gamma.x), 1.0)); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc index c4fa73cdcce..9f4eace6cbe 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc @@ -6,33 +6,33 @@ uniform vec4 u_gamma; uniform vec4 u_tex_size0; SAMPLER2D(s_tex, 0); -#define TEX2D(v) pow(texture2D(s_tex, v).rgb, vec3_splat(u_gamma.x)) +#define TEX2D(v) pow(texture2D(s_tex, v), vec4(vec3_splat(u_gamma.x), 1.0)) void main() { - vec3 sum = vec3_splat(0.0); + vec4 sum = vec4_splat(0.0); float oney = 1.0/u_tex_size0.y; - sum += TEX2D(v_texCoord + vec2(0.0, -8.0 * oney)) * vec3_splat(v_coeffs2.w); - sum += TEX2D(v_texCoord + vec2(0.0, -7.0 * oney)) * vec3_splat(v_coeffs2.z); - sum += TEX2D(v_texCoord + vec2(0.0, -6.0 * oney)) * vec3_splat(v_coeffs2.y); - sum += TEX2D(v_texCoord + vec2(0.0, -5.0 * oney)) * vec3_splat(v_coeffs2.x); - sum += TEX2D(v_texCoord + vec2(0.0, -4.0 * oney)) * vec3_splat(v_coeffs.w); - sum += TEX2D(v_texCoord + vec2(0.0, -3.0 * oney)) * vec3_splat(v_coeffs.z); - sum += TEX2D(v_texCoord + vec2(0.0, -2.0 * oney)) * vec3_splat(v_coeffs.y); - sum += TEX2D(v_texCoord + vec2(0.0, -1.0 * oney)) * vec3_splat(v_coeffs.x); + sum += TEX2D(v_texCoord + vec2(0.0, -8.0 * oney)) * vec4_splat(v_coeffs2.w); + sum += TEX2D(v_texCoord + vec2(0.0, -7.0 * oney)) * vec4_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(0.0, -6.0 * oney)) * vec4_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(0.0, -5.0 * oney)) * vec4_splat(v_coeffs2.x); + sum += TEX2D(v_texCoord + vec2(0.0, -4.0 * oney)) * vec4_splat(v_coeffs.w); + sum += TEX2D(v_texCoord + vec2(0.0, -3.0 * oney)) * vec4_splat(v_coeffs.z); + sum += TEX2D(v_texCoord + vec2(0.0, -2.0 * oney)) * vec4_splat(v_coeffs.y); + sum += TEX2D(v_texCoord + vec2(0.0, -1.0 * oney)) * vec4_splat(v_coeffs.x); sum += TEX2D(v_texCoord); - sum += TEX2D(v_texCoord + vec2(0.0, +1.0 * oney)) * vec3_splat(v_coeffs.x); - sum += TEX2D(v_texCoord + vec2(0.0, +2.0 * oney)) * vec3_splat(v_coeffs.y); - sum += TEX2D(v_texCoord + vec2(0.0, +3.0 * oney)) * vec3_splat(v_coeffs.z); - sum += TEX2D(v_texCoord + vec2(0.0, +4.0 * oney)) * vec3_splat(v_coeffs.w); - sum += TEX2D(v_texCoord + vec2(0.0, +5.0 * oney)) * vec3_splat(v_coeffs2.x); - sum += TEX2D(v_texCoord + vec2(0.0, +6.0 * oney)) * vec3_splat(v_coeffs2.y); - sum += TEX2D(v_texCoord + vec2(0.0, +7.0 * oney)) * vec3_splat(v_coeffs2.z); - sum += TEX2D(v_texCoord + vec2(0.0, +8.0 * oney)) * vec3_splat(v_coeffs2.w); + sum += TEX2D(v_texCoord + vec2(0.0, +1.0 * oney)) * vec4_splat(v_coeffs.x); + sum += TEX2D(v_texCoord + vec2(0.0, +2.0 * oney)) * vec4_splat(v_coeffs.y); + sum += TEX2D(v_texCoord + vec2(0.0, +3.0 * oney)) * vec4_splat(v_coeffs.z); + sum += TEX2D(v_texCoord + vec2(0.0, +4.0 * oney)) * vec4_splat(v_coeffs.w); + sum += TEX2D(v_texCoord + vec2(0.0, +5.0 * oney)) * vec4_splat(v_coeffs2.x); + sum += TEX2D(v_texCoord + vec2(0.0, +6.0 * oney)) * vec4_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(0.0, +7.0 * oney)) * vec4_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(0.0, +8.0 * oney)) * vec4_splat(v_coeffs2.w); float norm = 1.0 / (1.0 + 2.0*(v_coeffs.x+v_coeffs.y+v_coeffs.z+v_coeffs.w +v_coeffs2.x+v_coeffs2.y+v_coeffs2.z+v_coeffs2.w)); - gl_FragColor = vec4( pow(sum*vec3_splat(norm), vec3_splat(1.0/u_gamma.x)), 1.0 ); + gl_FragColor = pow(sum*vec4_splat(norm), vec4(vec3_splat(1.0/u_gamma.x), 1.0)); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_lowpass.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_lowpass.sc index 2f48bbac321..37ab685957c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_lowpass.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_lowpass.sc @@ -33,5 +33,5 @@ void main() sum +=sample_screen(v_texCoord+vec2(-7.0*onex,0.0))*vec3_splat(v_lpcoeffs2.w); sum +=sample_screen(v_texCoord+vec2( 7.0*onex,0.0))*vec3_splat(v_lpcoeffs2.w); - gl_FragColor = vec4( sum, 1.0 ); + gl_FragColor = vec4( sum, texture2D(s_screen, v_texCoord).a ); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_mipmap8.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_mipmap8.sc index 0f86bdbc7ba..2e0f8038053 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_mipmap8.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_mipmap8.sc @@ -22,7 +22,7 @@ uniform vec4 u_smooth; const vec2 v05 = vec2(0.5,0.5); // pix has integer coordinates -> average four pixels using bilinear filtering -vec3 sample_screen(vec2 pix) +vec4 sample_screen(vec2 pix) { vec2 border = step(-0.5, u_tex_size0.xy - pix); float weight = border.x * border.y; @@ -34,12 +34,12 @@ vec3 sample_screen(vec2 pix) border = clamp(u_tex_size0.xy-x,0.0,1.0); weight *= border.x * border.y; - vec3 tex = texture2D(s_screen, x / u_tex_size0.xy).rgb; + vec4 tex = texture2D(s_screen, x / u_tex_size0.xy); - return tex * vec3_splat(weight); + return tex * vec4_splat(weight); } -vec3 sample_mipmap(vec2 pix, vec2 offset, vec2 size) +vec4 sample_mipmap(vec2 pix, vec2 offset, vec2 size) { vec2 border = step(-0.5, size - pix) * step(-0.5, pix); float weight = border.x * border.y; @@ -51,9 +51,9 @@ vec3 sample_mipmap(vec2 pix, vec2 offset, vec2 size) border = clamp(size-x,0.0,1.0); weight *= border.x * border.y; - vec3 tex = texture2D(s_mipmap, (x + offset) / u_tex_size0.xy).rgb; + vec4 tex = texture2D(s_mipmap, (x + offset) / u_tex_size0.xy); - return tex * vec3_splat(weight); + return tex * vec4_splat(weight); } void main() @@ -66,7 +66,7 @@ void main() // sample 4x4 grid // each sample uses bilinear filtering to average a 2x2 region // overall reduction by 8x8 - vec3 tex = ( sample_screen(x + vec2(-3.0,-3.0)) + vec4 tex = ( sample_screen(x + vec2(-3.0,-3.0)) + sample_screen(x + vec2(-3.0,-1.0)) + sample_screen(x + vec2(-3.0, 1.0)) + sample_screen(x + vec2(-3.0, 3.0)) @@ -113,7 +113,7 @@ void main() if (fc) x = vec2(4.0,4.0); - vec3 tex = ( sample_mipmap(x + vec2(-3.0,-3.0),offset0,newsize) + vec4 tex = ( sample_mipmap(x + vec2(-3.0,-3.0),offset0,newsize) + sample_mipmap(x + vec2(-3.0,-1.0),offset0,newsize) + sample_mipmap(x + vec2(-3.0, 1.0),offset0,newsize) + sample_mipmap(x + vec2(-3.0, 3.0),offset0,newsize) @@ -133,16 +133,16 @@ void main() if (fc) { // this sample yields average over the whole screen // apply a compensation for the zeros included in the 8^n average float f = fac*fac / (u_tex_size0.x * u_tex_size0.y); - vec3 col = tex * vec3_splat(f); + vec4 col = tex * vec4_splat(f); if (v_texCoord.y * u_tex_size1.y < ( offset0.y + u_tex_size1.y ) * 0.5) { - gl_FragColor = vec4(col,1.0); + gl_FragColor = col; } else { // we are near (1,1): in this region include the temporal filter vec4 old = texture2D(s_mipmap, v_texCoord.xy); - gl_FragColor = vec4(mix(col,old.rgb,u_smooth.x),1.0); + gl_FragColor = mix(col,old,u_smooth.x); } } else { - gl_FragColor = vec4(tex.rgb,1.0); + gl_FragColor = tex; } } } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_phosphor_apply.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_phosphor_apply.sc index c45fb8f883f..f7e116696cb 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_phosphor_apply.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_phosphor_apply.sc @@ -28,15 +28,15 @@ void main() vec4 screen = texture2D(s_screen, v_texCoord); vec4 phosphor = texture2D(s_phosphor, v_texCoord); - vec3 cscrn = pow(screen.rgb, vec3_splat(u_gamma.x)); - vec3 cphos = pow(phosphor.rgb, vec3_splat(u_gamma.x)); + vec4 cscrn = pow(screen, vec4(vec3_splat(u_gamma.x), 1.0)); + vec4 cphos = pow(phosphor, vec4(vec3_splat(u_gamma.x), 1.0)); // encode the upper 2 bits of the time elapsed in the lower 2 bits of b float t = 255.0*phosphor.a + fract(phosphor.b*255.0/4.0)*1024.0; - cphos *= vec3_splat( u_phosphor_amplitude.x * decay(t) ); + cphos *= vec4_splat( u_phosphor_amplitude.x * decay(t) ); - vec3 col = pow(cscrn + cphos, vec3_splat(1.0/u_gamma.x)); + vec4 col = pow(cscrn + cphos, vec4(vec3_splat(1.0/u_gamma.x), 1.0)); - gl_FragColor = vec4(col, 1.0); + gl_FragColor = col; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_crt-geom.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_crt-geom.sc index cc3ed09aa14..03bcc7499f6 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_crt-geom.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_crt-geom.sc @@ -19,78 +19,82 @@ uniform vec4 R; uniform vec4 angle; uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; uniform vec4 u_rotation_type; #define FIX(c) max(abs(c), 1e-5) float intersect(vec2 xy , vec2 sinangle, vec2 cosangle) { - float A = dot(xy,xy)+d.x*d.x; - float B = 2.0*(R.x*(dot(xy,sinangle)-d.x*cosangle.x*cosangle.y)-d.x*d.x); - float C = d.x*d.x + 2.0*R.x*d.x*cosangle.x*cosangle.y; - return (-B-sqrt(B*B-4.0*A*C))/(2.0*A); + float A = dot(xy,xy)+d.x*d.x; + float B = 2.0*(R.x*(dot(xy,sinangle)-d.x*cosangle.x*cosangle.y)-d.x*d.x); + float C = d.x*d.x + 2.0*R.x*d.x*cosangle.x*cosangle.y; + return (-B-sqrt(B*B-4.0*A*C))/(2.0*A); } vec2 bkwtrans(vec2 xy, vec2 sinangle, vec2 cosangle) { - float c = intersect(xy, sinangle, cosangle); - vec2 pt = vec2_splat(c)*xy; - pt -= vec2_splat(-R.x)*sinangle; - pt /= vec2_splat(R.x); - vec2 tang = sinangle/cosangle; - vec2 poc = pt/cosangle; - float A = dot(tang,tang)+1.0; - float B = -2.0*dot(poc,tang); - float C = dot(poc,poc)-1.0; - float a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A); - vec2 uv = (pt-a*sinangle)/cosangle; - float r = FIX(R.x*acos(a)); - return uv*r/sin(r/R.x); + float c = intersect(xy, sinangle, cosangle); + vec2 pt = vec2_splat(c)*xy; + pt -= vec2_splat(-R.x)*sinangle; + pt /= vec2_splat(R.x); + vec2 tang = sinangle/cosangle; + vec2 poc = pt/cosangle; + float A = dot(tang,tang)+1.0; + float B = -2.0*dot(poc,tang); + float C = dot(poc,poc)-1.0; + float a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A); + vec2 uv = (pt-a*sinangle)/cosangle; + float r = FIX(R.x*acos(a)); + return uv*r/sin(r/R.x); } vec2 fwtrans(vec2 uv, vec2 sinangle, vec2 cosangle) { - float r = FIX(sqrt(dot(uv,uv))); - uv *= sin(r/R.x)/r; - float x = 1.0-cos(r/R.x); - float D = d.x/R.x + x*cosangle.x*cosangle.y+dot(uv,sinangle); - return d.x*(uv*cosangle-x*sinangle)/D; + float r = FIX(sqrt(dot(uv,uv))); + uv *= sin(r/R.x)/r; + float x = 1.0-cos(r/R.x); + float D = d.x/R.x + x*cosangle.x*cosangle.y+dot(uv,sinangle); + return d.x*(uv*cosangle-x*sinangle)/D; } vec3 maxscale(vec2 sinangle, vec2 cosangle) { - vec2 c = bkwtrans(-R.x * sinangle / (1.0 + R.x/d.x*cosangle.x*cosangle.y), sinangle, cosangle); - vec2 a = vec2(0.5,0.5)*aspect.xy; - vec2 lo = vec2(fwtrans(vec2(-a.x,c.y), sinangle, cosangle).x, - fwtrans(vec2(c.x,-a.y), sinangle, cosangle).y)/aspect.xy; - vec2 hi = vec2(fwtrans(vec2(+a.x,c.y), sinangle, cosangle).x, - fwtrans(vec2(c.x,+a.y), sinangle, cosangle).y)/aspect.xy; - return vec3((hi+lo)*aspect.xy*0.5,max(hi.x-lo.x,hi.y-lo.y)); + vec2 c = bkwtrans(-R.x * sinangle / (1.0 + R.x/d.x*cosangle.x*cosangle.y), sinangle, cosangle); + vec2 a = vec2(0.5,0.5)*aspect.xy; + vec2 lo = vec2(fwtrans(vec2(-a.x,c.y), sinangle, cosangle).x, + fwtrans(vec2(c.x,-a.y), sinangle, cosangle).y)/aspect.xy; + vec2 hi = vec2(fwtrans(vec2(+a.x,c.y), sinangle, cosangle).x, + fwtrans(vec2(c.x,+a.y), sinangle, cosangle).y)/aspect.xy; + return vec3((hi+lo)*aspect.xy*0.5,max(hi.x-lo.x,hi.y-lo.y)); } void main() { - // Do the standard vertex processing. - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texCoord = a_texcoord0; + // Do the standard vertex processing. + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + v_texCoord = a_texcoord0; - // Precalculate a bunch of useful values we'll need in the fragment - // shader. - vec2 ang; - // if (u_rotation_type.x < 0.5) - // ang = vec2(0.0,angle.x); - // else if (u_rotation_type.x < 1.5) - // ang = vec2(angle.x,0.0); - // else if (u_rotation_type.x < 2.5) - // ang = vec2(0.0,-angle.x); - // else - // ang = vec2(-angle.x,0.0); - ang = angle.xy; - v_sinangle = sin(ang); - v_cosangle = cos(ang); - v_stretch = maxscale(v_sinangle, v_cosangle); + // Precalculate a bunch of useful values we'll need in the fragment + // shader. + vec2 ang; + // if (u_rotation_type.x < 0.5) + // ang = vec2(0.0,angle.x); + // else if (u_rotation_type.x < 1.5) + // ang = vec2(angle.x,0.0); + // else if (u_rotation_type.x < 2.5) + // ang = vec2(0.0,-angle.x); + // else + // ang = vec2(-angle.x,0.0); + ang = angle.xy; + v_sinangle = sin(ang); + v_cosangle = cos(ang); + v_stretch = maxscale(v_sinangle, v_cosangle); - // The size of one texel, in texture-coordinates. - v_one = 1.0 / u_tex_size0.xy; + // The size of one texel, in texture-coordinates. + v_one = 1.0 / u_tex_size0.xy; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc index e9969187c94..e6e41ff8578 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc @@ -4,16 +4,20 @@ $output v_texCoord, v_coeffs, v_coeffs2 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; uniform vec4 u_width; uniform vec4 u_aspect; void main() { - float wid = u_width.x*u_tex_size0.x/(320.*u_aspect.x); - v_coeffs = exp(vec4(1.,4.,9.,16.)*vec4_splat(-1.0/wid/wid)); - v_coeffs2 = exp(vec4(25.,36.,49.,64.)*vec4_splat(-1.0/wid/wid)); + float wid = u_width.x*u_tex_size0.x/(320.*u_aspect.x); + v_coeffs = exp(vec4(1.,4.,9.,16.)*vec4_splat(-1.0/wid/wid)); + v_coeffs2 = exp(vec4(25.,36.,49.,64.)*vec4_splat(-1.0/wid/wid)); - // Do the standard vertex processing. - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texCoord = a_texcoord0; + // Do the standard vertex processing. + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + v_texCoord = a_texcoord0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc index 0b7ff9b411f..db01c6df634 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc @@ -4,16 +4,20 @@ $output v_texCoord, v_coeffs, v_coeffs2 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; uniform vec4 u_width; uniform vec4 u_aspect; void main() { - float wid = u_width.x*u_tex_size0.y/(320.*u_aspect.y); - v_coeffs = exp(vec4(1.,4.,9.,16.)*vec4_splat(-1.0/wid/wid)); - v_coeffs2 = exp(vec4(25.,36.,49.,64.)*vec4_splat(-1.0/wid/wid)); + float wid = u_width.x*u_tex_size0.y/(320.*u_aspect.y); + v_coeffs = exp(vec4(1.,4.,9.,16.)*vec4_splat(-1.0/wid/wid)); + v_coeffs2 = exp(vec4(25.,36.,49.,64.)*vec4_splat(-1.0/wid/wid)); - // Do the standard vertex processing. - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texCoord = a_texcoord0; + // Do the standard vertex processing. + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + v_texCoord = a_texcoord0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_lowpass.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_lowpass.sc index 4d948a63a89..b9e92b4b4b4 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_lowpass.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_lowpass.sc @@ -4,46 +4,50 @@ $output v_texCoord, v_lpcoeffs1, v_lpcoeffs2 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; uniform vec4 u_lowpass_cutoff; uniform vec4 u_lowpass_width; void main() { - // Do the standard vertex processing. - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texCoord = a_texcoord0; + // Do the standard vertex processing. + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + v_texCoord = a_texcoord0; - // interpret the cutoff and width as target resolutions in pixels per scanline - // include factor of 1/2 because max frequency at given resolution is Nyquist - float a = 0.5 * u_lowpass_cutoff.x / u_tex_size0.x; - float b = 0.5 * u_lowpass_width.x / u_tex_size0.x; - float w0 = (a-0.5*b); - float w1 = (a+0.5*b); + // interpret the cutoff and width as target resolutions in pixels per scanline + // include factor of 1/2 because max frequency at given resolution is Nyquist + float a = 0.5 * u_lowpass_cutoff.x / u_tex_size0.x; + float b = 0.5 * u_lowpass_width.x / u_tex_size0.x; + float w0 = (a-0.5*b); + float w1 = (a+0.5*b); - float two_pi = 6.283185307179586; - vec3 n1 = vec3(1.0,2.0,3.0); - vec4 n2 = vec4(4.0,5.0,6.0,7.0); + float two_pi = 6.283185307179586; + vec3 n1 = vec3(1.0,2.0,3.0); + vec4 n2 = vec4(4.0,5.0,6.0,7.0); - // target frequency response: - // 1 for w < w0 - // 0 for w > w1 - // linearly decreasing for w0 < w < w1 - // this will be approximated by including the lowest Fourier modes - if (w0 > 0.5) { // no filtering - v_lpcoeffs1 = vec4(1.0,0.0,0.0,0.0); - v_lpcoeffs2 = vec4_splat(0.0); - } else if (w1 > 0.5) { // don't reach zero - // here the target has a nonzero response at the Nyquist frequency - v_lpcoeffs1.x = w1 + w0 - (w1 - 0.5)*(w1 - 0.5)/(w1 - w0); - v_lpcoeffs1.yzw = 2.0 / ( two_pi*two_pi*(w1-w0)*n1*n1 ) * ( cos(two_pi*w0*n1) - cos(two_pi*0.5*n1) ); - v_lpcoeffs2 = 2.0 / ( two_pi*two_pi*(w1-w0)*n2*n2 ) * ( cos(two_pi*w0*n2) - cos(two_pi*0.5*n2) ); - } else if (w1 == w0) { // sharp cutoff - v_lpcoeffs1.x = 2.0 * w0; - v_lpcoeffs1.yzw = 2.0 / ( two_pi * n1 ) * sin(two_pi*w0*n1); - v_lpcoeffs2 = 2.0 / ( two_pi * n2 ) * sin(two_pi*w0*n2); - } else { - v_lpcoeffs1.x = w1 + w0; - v_lpcoeffs1.yzw = 2.0 / ( two_pi*two_pi*(w1-w0)*n1*n1 ) * ( cos(two_pi*w0*n1) - cos(two_pi*w1*n1) ); - v_lpcoeffs2 = 2.0 / ( two_pi*two_pi*(w1-w0)*n2*n2 ) * ( cos(two_pi*w0*n2) - cos(two_pi*w1*n2) ); - } + // target frequency response: + // 1 for w < w0 + // 0 for w > w1 + // linearly decreasing for w0 < w < w1 + // this will be approximated by including the lowest Fourier modes + if (w0 > 0.5) { // no filtering + v_lpcoeffs1 = vec4(1.0,0.0,0.0,0.0); + v_lpcoeffs2 = vec4_splat(0.0); + } else if (w1 > 0.5) { // don't reach zero + // here the target has a nonzero response at the Nyquist frequency + v_lpcoeffs1.x = w1 + w0 - (w1 - 0.5)*(w1 - 0.5)/(w1 - w0); + v_lpcoeffs1.yzw = 2.0 / ( two_pi*two_pi*(w1-w0)*n1*n1 ) * ( cos(two_pi*w0*n1) - cos(two_pi*0.5*n1) ); + v_lpcoeffs2 = 2.0 / ( two_pi*two_pi*(w1-w0)*n2*n2 ) * ( cos(two_pi*w0*n2) - cos(two_pi*0.5*n2) ); + } else if (w1 == w0) { // sharp cutoff + v_lpcoeffs1.x = 2.0 * w0; + v_lpcoeffs1.yzw = 2.0 / ( two_pi * n1 ) * sin(two_pi*w0*n1); + v_lpcoeffs2 = 2.0 / ( two_pi * n2 ) * sin(two_pi*w0*n2); + } else { + v_lpcoeffs1.x = w1 + w0; + v_lpcoeffs1.yzw = 2.0 / ( two_pi*two_pi*(w1-w0)*n1*n1 ) * ( cos(two_pi*w0*n1) - cos(two_pi*w1*n1) ); + v_lpcoeffs2 = 2.0 / ( two_pi*two_pi*(w1-w0)*n2*n2 ) * ( cos(two_pi*w0*n2) - cos(two_pi*w1*n2) ); + } } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_mipmap8.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_mipmap8.sc index bdd09148403..ba73cd682fa 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_mipmap8.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_mipmap8.sc @@ -3,9 +3,14 @@ $output v_texCoord #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { - // Do the standard vertex processing. - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texCoord = a_texcoord0; + // Do the standard vertex processing. + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + v_texCoord = a_texcoord0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_apply.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_apply.sc index bdd09148403..ba73cd682fa 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_apply.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_apply.sc @@ -3,9 +3,14 @@ $output v_texCoord #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { - // Do the standard vertex processing. - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texCoord = a_texcoord0; + // Do the standard vertex processing. + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + v_texCoord = a_texcoord0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_update.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_update.sc index bdd09148403..ba73cd682fa 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_update.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_phosphor_update.sc @@ -3,9 +3,14 @@ $output v_texCoord #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { - // Do the standard vertex processing. - gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); - v_texCoord = a_texcoord0; + // Do the standard vertex processing. + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + v_texCoord = a_texcoord0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt/vs_crt-caligari.sc b/src/osd/modules/render/bgfx/shaders/chains/crt/vs_crt-caligari.sc index 6dead210d9e..ce22c1e7200 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt/vs_crt-caligari.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt/vs_crt-caligari.sc @@ -32,10 +32,14 @@ $output v_texcoord0, v_texcoord1, v_color0 // Autos uniform vec4 u_source_size; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; onex = vec2(1.0 / u_source_size.x, 0.0); diff --git a/src/osd/modules/render/bgfx/shaders/chains/default/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/default/vs_blit.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/default/vs_blit.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/default/vs_blit.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/eagle/vs_eagle.sc b/src/osd/modules/render/bgfx/shaders/chains/eagle/vs_eagle.sc index 1ab076dfa73..095d5d562e0 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/eagle/vs_eagle.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/eagle/vs_eagle.sc @@ -14,10 +14,14 @@ $output v_color0, texCoord, t1, t2, t3, t4, t5, t6, t7, t8 // Autos uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_color0 = a_color0; vec2 ps = vec2(1.0, 1.0) / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_scanline.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_scanline.sc index 5942c75bab6..2126398062b 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_scanline.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_scanline.sc @@ -37,34 +37,15 @@ SAMPLER2D(s_shadow, 1); // Scanline Pixel Shader //----------------------------------------------------------------------------- -vec2 GetAdjustedCoords(vec2 coord) -{ - // center coordinates - coord -= 0.5; - - // apply screen scale - coord *= u_screen_scale.xy; - - // un-center coordinates - coord += 0.5; - - // apply screen offset - coord += u_screen_offset.xy; - - return coord; -} - void main() { - vec2 BaseCoord = GetAdjustedCoords(v_texcoord0); - // Color - vec4 BaseColor = texture2D(s_tex, BaseCoord); + vec4 BaseColor = texture2D(s_tex, v_texcoord0); // Clamp - if (BaseCoord.x < 0.0 || BaseCoord.y < 0.0 || BaseCoord.x > 1.0 || BaseCoord.y > 1.0) + if (v_texcoord0.x < 0.0 || v_texcoord0.y < 0.0 || v_texcoord0.x > 1.0 || v_texcoord0.y > 1.0) { - gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); } else { @@ -76,7 +57,7 @@ void main() float ColorBrightness = 0.299 * BaseColor.r + 0.587 * BaseColor.g + 0.114 * BaseColor.b; - float ScanCoord = BaseCoord.y; + float ScanCoord = v_texcoord0.y; ScanCoord += u_swap_xy.x > 0.0 ? u_quad_dims.x <= u_source_dims.x * 2.0 ? 0.5 / u_quad_dims.x // uncenter scanlines if the quad is less than twice the size of the source diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_chroma.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_chroma.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_chroma.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_chroma.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_color.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_color.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_color.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_color.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_deconverge.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_deconverge.sc index b77d85d1ea8..55c2f0e2e34 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_deconverge.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_deconverge.sc @@ -8,6 +8,7 @@ $output v_color0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3 // Autos uniform vec4 u_source_size; +uniform vec4 u_inv_view_dims; // User-supplied uniform vec4 u_converge_red; @@ -20,6 +21,9 @@ uniform vec4 u_radial_converge_blue; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif vec2 half_value = vec2(0.5, 0.5); diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_defocus.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_defocus.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_defocus.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_defocus.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_distortion.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_distortion.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_distortion.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_distortion.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_decode.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_decode.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_decode.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_decode.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_encode.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_encode.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_encode.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_ntsc_encode.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_phosphor.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_phosphor.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_phosphor.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_phosphor.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_post.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_post.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_post.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_post.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_prescale.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_prescale.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_prescale.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_prescale.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_scanline.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_scanline.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_scanline.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/vs_scanline.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq2x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq2x.sc index dcff07b17f5..727f5763857 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq2x.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq2x.sc @@ -8,10 +8,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_color0 // Autos uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_color0 = a_color0; vec2 ps = vec2(1.0, 1.0) / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq3x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq3x.sc index dcff07b17f5..727f5763857 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq3x.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq3x.sc @@ -8,10 +8,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_color0 // Autos uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_color0 = a_color0; vec2 ps = vec2(1.0, 1.0) / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq4x.sc b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq4x.sc index dcff07b17f5..727f5763857 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq4x.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hqx/vs_hq4x.sc @@ -8,10 +8,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_color0 // Autos uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_color0 = a_color0; vec2 ps = vec2(1.0, 1.0) / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_lcd-grid.sc b/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_lcd-grid.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_lcd-grid.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_lcd-grid.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_persistence.sc b/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_persistence.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_persistence.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/lcd-grid/vs_persistence.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_blit.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_blit.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_blit.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_bob-and-ghost-deinterlace.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_bob-and-ghost-deinterlace.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_bob-and-ghost-deinterlace.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_bob-and-ghost-deinterlace.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass0.sc index f46bf23b063..1ed054f1b9a 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass0.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass0.sc @@ -14,10 +14,14 @@ $output v_texcoord0, v_texcoord1, v_color0 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif vec2 ps = vec2(1.0 / u_tex_size0.xy); float dx = ps.x; diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass1.sc index 486edf97c5c..69a23cb477c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass1.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_deposterize-pass1.sc @@ -14,10 +14,14 @@ $output v_texcoord0, v_texcoord1, v_color0 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif vec2 ps = vec2(1.0 / u_tex_size0.xy); float dx = ps.x; diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_lut.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_lut.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_lut.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_lut.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_resize_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_resize_blit.sc new file mode 100644 index 00000000000..0a9f2f178e1 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_resize_blit.sc @@ -0,0 +1,21 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_color0 + +// license:BSD-3-Clause +// copyright-holders:Dario Manesku + +#include "common.sh" + +uniform vec4 u_inv_view_dims; +uniform vec4 u_tex_bounds0; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif + + v_texcoord0 = a_texcoord0 * (u_tex_bounds0.zw - u_tex_bounds0.xy) + u_tex_bounds0.xy; + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_saturation.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_saturation.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/misc/vs_saturation.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/misc/vs_saturation.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_gaussian.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_gaussian.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_gaussian.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_gaussian.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_offset_sat.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_offset_sat.sc index f071beaaa26..68ee1c25e92 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_offset_sat.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_horizontal/vs_offset_sat.sc @@ -9,9 +9,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0 * vec2(0.16666666 * 0.9, 1.0 * 0.8) + vec2(0.1, 0.1); v_color0 = a_color0; -} \ No newline at end of file +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_gaussian.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_gaussian.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_gaussian.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_gaussian.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_offset_sat.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_offset_sat.sc index a9f6649c1e5..17853450538 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_offset_sat.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_left_vertical/vs_offset_sat.sc @@ -9,9 +9,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0 * vec2(1.0 * 0.8, 0.685185 * 0.9) + vec2(0.1, 0.1); v_color0 = a_color0; -} \ No newline at end of file +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_gaussian.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_gaussian.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_gaussian.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_gaussian.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_offset_sat.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_offset_sat.sc index a473bc4123c..d7b2bbe0f8c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_offset_sat.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_horizontal/vs_offset_sat.sc @@ -9,9 +9,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0 * vec2(0.16666666 * 0.9, 1.0 * 0.8) + vec2(0.9 - 0.16666666 * 0.9, 0.1); v_color0 = a_color0; -} \ No newline at end of file +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_gaussian.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_gaussian.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_gaussian.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_gaussian.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_offset_sat.sc b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_offset_sat.sc index 8af6a293d8e..9e8aede6ea8 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_offset_sat.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/pillarbox_right_vertical/vs_offset_sat.sc @@ -9,9 +9,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0 * vec2(1.0 * 0.8, 0.685185 * 0.9) + vec2(0.1, 0.9 - 0.685185 * 0.9); v_color0 = a_color0; -} \ No newline at end of file +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/unfiltered/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/unfiltered/vs_blit.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/unfiltered/vs_blit.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/unfiltered/vs_blit.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_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 index 9433c8359be..7e7200067b0 100644 --- 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 @@ -32,10 +32,14 @@ $output v_texcoord0, v_texcoord1, v_color0 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_custom-jinc2-sharper.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_custom-jinc2-sharper.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_custom-jinc2-sharper.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_custom-jinc2-sharper.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.sc index 1c3ee6a8f23..335c9ef8b4c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.sc @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_color #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.sc index c5bd41ee120..338cadbe4b7 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.sc @@ -7,10 +7,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_color #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.sc index c5bd41ee120..338cadbe4b7 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.sc @@ -7,10 +7,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_color #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.sc index 5827f1999b8..21e16b595e4 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.sc @@ -32,9 +32,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.sc index 60637684154..fc33723ec9d 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.sc @@ -32,9 +32,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.sc index 2cfe541e2b8..a8ec5539c0b 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.sc @@ -32,9 +32,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass0.sc index d10c9c24665..8352137204e 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass0.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass0.sc @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_color #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass1.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass1.sc index 5827f1999b8..21e16b595e4 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass1.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass1.sc @@ -32,9 +32,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass2.sc index 9ae87c8a7ea..8f2d3277665 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass2.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass2.sc @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_color #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass3.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass3.sc index 9ae87c8a7ea..8f2d3277665 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass3.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/super-xbr/vs_super-xbr-pass3.sc @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_color #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv1-noblend.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv1-noblend.sc index 3e97446a880..de23993d020 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv1-noblend.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv1-noblend.sc @@ -7,10 +7,14 @@ $output v_texcoord0, v_texcoord1, v_color0 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-3d.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-3d.sc index a3bb4330f45..7992b9eee51 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-3d.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-3d.sc @@ -9,10 +9,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco uniform vec4 XBR_RES; uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = XBR_RES.xx / u_tex_size0.xy; diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-fast.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-fast.sc index 38e92865308..48e9664b766 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-fast.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2-fast.sc @@ -7,10 +7,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_color0 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index cfc1a7cfc47..5bcf3e31f5a 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2.sc index ce6e411b75d..22e993426ed 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/vs_xbr-lv2.sc @@ -7,10 +7,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index 114f1669ad1..5957004443c 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index 3d72da14478..a5ee8cee547 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index c09b7b66d1c..35cc742cff1 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index 2be09e52908..3a9b0e56b1c 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index 2ec42c6585d..c08e3988e24 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index f40310aa1b9..8c2b0aec4cd 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index e363aba2eb4..d7328857ffd 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index 8f9c58be4c1..48ebe4f0a54 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index f40310aa1b9..8c2b0aec4cd 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index c09b7b66d1c..35cc742cff1 100644 --- 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 @@ -43,10 +43,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; vec2 ps = 1.0 / u_tex_size0.xy; 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 index 59ffb0a026a..15490257390 100644 --- 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 @@ -34,10 +34,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index 5c20062823a..f63eb7b2391 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index fbb10ec9ea5..db8c513319b 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 #include "common.sh" uniform vec4 u_tex_size1; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index afdcf872331..0c317f16cc7 100644 --- 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 @@ -34,10 +34,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index ba0da15a70d..fbcf72fd706 100644 --- 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 @@ -34,10 +34,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index bfd5e4a6414..e75cc78ac8c 100644 --- 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 @@ -34,10 +34,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index b85cca1828d..56cebbd6540 100644 --- 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 @@ -32,10 +32,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 #include "common.sh" uniform vec4 u_tex_size1; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index 11042eab09a..c35e62e81ac 100644 --- 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 @@ -34,10 +34,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 #include "common.sh" uniform vec4 u_tex_size1; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index 80dd11d7ad9..8ae8f8df41c 100644 --- 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 @@ -34,10 +34,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index 7932ba25f15..439005d2941 100644 --- 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 @@ -32,10 +32,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_color0 uniform vec4 u_tex_size1; uniform vec4 u_target_dims; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A3 B3 C3 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 index 1edfd8632ad..24f3b396cc2 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_color0 #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A3 B3 C3 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 index 92cf6b60b87..1d67bb87ebe 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4, v_texco #include "common.sh" uniform vec4 u_tex_size0; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A1 B1 C1 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 index a6926a41f8b..2c85859340b 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_color0 #include "common.sh" uniform vec4 u_tex_size1; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A3 B3 C3 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 index 29fec2f1759..5e62a75a12e 100644 --- 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 @@ -33,10 +33,14 @@ $output v_texcoord0, v_texcoord1, v_color0 #include "common.sh" uniform vec4 u_tex_size1; +uniform vec4 u_inv_view_dims; void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; // A3 B3 C3 diff --git a/src/osd/modules/render/bgfx/shaders/vs_gui.sc b/src/osd/modules/render/bgfx/shaders/vs_gui.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/vs_gui.sc +++ b/src/osd/modules/render/bgfx/shaders/vs_gui.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/shaders/vs_screen.sc b/src/osd/modules/render/bgfx/shaders/vs_screen.sc index 405ef8feb3b..df2b37f203c 100644 --- a/src/osd/modules/render/bgfx/shaders/vs_screen.sc +++ b/src/osd/modules/render/bgfx/shaders/vs_screen.sc @@ -6,9 +6,14 @@ $output v_texcoord0, v_color0 #include "common.sh" +uniform vec4 u_inv_view_dims; + void main() { gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); +#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 300 + gl_Position.xy += u_inv_view_dims.xy * gl_Position.w; +#endif v_texcoord0 = a_texcoord0; v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/statereader.cpp b/src/osd/modules/render/bgfx/statereader.cpp index 51b08fea864..0faef68aa7c 100644 --- a/src/osd/modules/render/bgfx/statereader.cpp +++ b/src/osd/modules/render/bgfx/statereader.cpp @@ -22,6 +22,14 @@ bool state_reader::V_READER_CHECK(bool condition, const util::format_argument_pa return condition; } +bool state_reader::V_READER_WARN(bool condition, const util::format_argument_pack &args) +{ + if (!condition) + osd_printf_warning("Warning: %s\n", util::string_format(args)); + + return condition; +} + uint64_t state_reader::get_enum_from_value(const Value& value, std::string name, const uint64_t default_value, const string_to_enum* enums, const int count) { if (value.HasMember(name.c_str())) @@ -112,7 +120,7 @@ float state_reader::get_float(const Value& value, const std::string name, const { if (value.HasMember(name.c_str())) { - return (float)value[name.c_str()].GetDouble(); + return float(value[name.c_str()].GetDouble()); } return default_value; } @@ -123,7 +131,7 @@ void state_reader::get_float(const Value& value, const std::string name, float* { if (count == 1) { - *out = (float) value[name.c_str()].GetDouble(); + *out = float(value[name.c_str()].GetDouble()); return; } else @@ -141,7 +149,7 @@ void state_reader::get_vec_values(const Value& value_array, float* data, const u { for (unsigned int i = 0; i < count && i < value_array.Size(); i++) { - data[i] = (float) value_array[i].GetDouble(); + data[i] = float(value_array[i].GetDouble()); } } diff --git a/src/osd/modules/render/bgfx/statereader.h b/src/osd/modules/render/bgfx/statereader.h index 0c452aabee8..6af02bbbd66 100644 --- a/src/osd/modules/render/bgfx/statereader.h +++ b/src/osd/modules/render/bgfx/statereader.h @@ -53,8 +53,15 @@ protected: return V_READER_CHECK(condition, util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); } + template + static bool READER_WARN(bool condition, Format &&fmt, Params &&... args) + { + return V_READER_WARN(condition, util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); + } + private: static bool V_READER_CHECK(bool condition, const util::format_argument_pack &args); + static bool V_READER_WARN(bool condition, const util::format_argument_pack &args); static void get_vec_values(const Value& value_array, float* data, const unsigned int count); }; diff --git a/src/osd/modules/render/bgfx/target.cpp b/src/osd/modules/render/bgfx/target.cpp index f900f4f99fb..dd9169cb6cd 100644 --- a/src/osd/modules/render/bgfx/target.cpp +++ b/src/osd/modules/render/bgfx/target.cpp @@ -10,13 +10,16 @@ #include "target.h" -bgfx_target::bgfx_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen) +bgfx_target::bgfx_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint16_t xprescale, uint16_t yprescale, + uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen) : m_name(name) , m_format(format) , m_targets(nullptr) , m_textures(nullptr) , m_width(width) , m_height(height) + , m_xprescale(xprescale) + , m_yprescale(yprescale) , m_double_buffer(double_buffer) , m_style(style) , m_filter(filter) @@ -39,10 +42,10 @@ bgfx_target::bgfx_target(std::string name, bgfx::TextureFormat::Enum format, uin m_targets = new bgfx::FrameBufferHandle[m_page_count]; for (int page = 0; page < m_page_count; page++) { - m_textures[page] = bgfx::createTexture2D(m_width, m_height, false, 1, format, wrap_mode | filter_mode | BGFX_TEXTURE_RT); + m_textures[page] = bgfx::createTexture2D(m_width * xprescale, m_height * yprescale, false, 1, format, wrap_mode | filter_mode | BGFX_TEXTURE_RT); assert(m_textures[page].idx != 0xffff); - m_textures[m_page_count + page] = bgfx::createTexture2D(m_width, m_height, false, 1, bgfx::TextureFormat::D32F, depth_flags | BGFX_TEXTURE_RT); + m_textures[m_page_count + page] = bgfx::createTexture2D(m_width * xprescale, m_height * yprescale, false, 1, bgfx::TextureFormat::D32F, depth_flags | BGFX_TEXTURE_RT); assert(m_textures[m_page_count + page].idx != 0xffff); bgfx::TextureHandle handles[2] = { m_textures[page], m_textures[m_page_count + page] }; @@ -62,6 +65,8 @@ bgfx_target::bgfx_target(void *handle, uint16_t width, uint16_t height) , m_textures(nullptr) , m_width(width) , m_height(height) + , m_xprescale(1) + , m_yprescale(1) , m_double_buffer(false) , m_style(TARGET_STYLE_CUSTOM) , m_filter(false) diff --git a/src/osd/modules/render/bgfx/target.h b/src/osd/modules/render/bgfx/target.h index c00fc669337..5b979373971 100644 --- a/src/osd/modules/render/bgfx/target.h +++ b/src/osd/modules/render/bgfx/target.h @@ -27,7 +27,8 @@ enum class bgfx_target : public bgfx_texture_handle_provider { public: - bgfx_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen); + bgfx_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint16_t xprescale, uint16_t yprescale, + uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen); bgfx_target(void *handle, uint16_t width, uint16_t height); virtual ~bgfx_target(); @@ -42,13 +43,16 @@ public: bool filter() const { return m_filter; } uint16_t scale() const { return m_scale; } uint32_t screen_index() const { return m_screen; } + uint16_t raw_width() const { return m_width; } + uint16_t raw_height() const { return m_height; } // bgfx_texture_handle_provider virtual bgfx::TextureHandle texture() const override; virtual bool is_target() const override { return true; } - virtual uint16_t width() const override { return m_width; } - virtual uint16_t height() const override { return m_height; } - virtual uint16_t rowpixels() const override { return m_width; } + virtual uint16_t width() const override { return m_width * m_xprescale; } + virtual uint16_t width_margin() const override { return 0; } + virtual uint16_t height() const override { return m_height * m_yprescale; } + virtual uint16_t rowpixels() const override { return m_width * m_xprescale; } virtual int width_div_factor() const override { return 1; } virtual int width_mul_factor() const override { return 1; } @@ -62,6 +66,8 @@ private: uint16_t m_width; uint16_t m_height; + uint16_t m_xprescale; + uint16_t m_yprescale; bool m_double_buffer; uint32_t m_style; diff --git a/src/osd/modules/render/bgfx/targetmanager.cpp b/src/osd/modules/render/bgfx/targetmanager.cpp index dfd5b2adbd1..38ef04b61f9 100644 --- a/src/osd/modules/render/bgfx/targetmanager.cpp +++ b/src/osd/modules/render/bgfx/targetmanager.cpp @@ -11,14 +11,14 @@ #include -#include - #include "modules/lib/osdobj_common.h" +#include "bgfxutil.h" #include "targetmanager.h" - #include "target.h" +#include + const int32_t target_manager::MAX_SCREENS = 100; target_manager::target_manager(texture_manager& textures) @@ -45,7 +45,8 @@ target_manager::~target_manager() } } -bgfx_target* target_manager::create_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen) +bgfx_target* target_manager::create_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint16_t xprescale, uint16_t yprescale, + uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen) { std::string full_name = name + std::to_string(screen); @@ -53,7 +54,7 @@ bgfx_target* target_manager::create_target(std::string name, bgfx::TextureFormat if (iter != m_targets.end()) destroy_target(name, screen); - bgfx_target *target = new bgfx_target(name, format, width, height, style, double_buffer, filter, scale, screen); + bgfx_target *target = new bgfx_target(name, format, width, height, xprescale, yprescale, style, double_buffer, filter, scale, screen); m_targets[full_name] = target; m_textures.add_provider(full_name, target); @@ -88,7 +89,7 @@ bgfx_target* target_manager::target(uint32_t screen, std::string name) return m_targets[full_name]; } -bool target_manager::update_target_sizes(uint32_t screen, uint16_t width, uint16_t height, uint32_t style) +bool target_manager::update_target_sizes(uint32_t screen, uint16_t width, uint16_t height, uint32_t style, uint16_t user_prescale, uint16_t max_prescale_size) { if (style == TARGET_STYLE_CUSTOM) return false; @@ -103,14 +104,14 @@ bool target_manager::update_target_sizes(uint32_t screen, uint16_t width, uint16 if (width != sizes[screen].width() || height != sizes[screen].height()) { sizes[screen] = osd_dim(width, height); - rebuild_targets(screen, style); + rebuild_targets(screen, style, user_prescale, max_prescale_size); return true; } return false; } -void target_manager::rebuild_targets(uint32_t screen, uint32_t style) +void target_manager::rebuild_targets(uint32_t screen, uint32_t style, uint16_t user_prescale, uint16_t max_prescale_size) { if (style == TARGET_STYLE_CUSTOM) return; @@ -135,13 +136,16 @@ void target_manager::rebuild_targets(uint32_t screen, uint32_t style) const uint16_t scale = target->scale(); const uint16_t width(sizes[screen].width()); const uint16_t height(sizes[screen].height()); + uint16_t xprescale = user_prescale; + uint16_t yprescale = user_prescale; + bgfx_util::find_prescale_factor(width, height, max_prescale_size, xprescale, yprescale); destroy_target(name, screen); - create_target(name, format, width, height, style, double_buffered, filter, scale, screen); + create_target(name, format, width, height, xprescale, yprescale, style, double_buffered, filter, scale, screen); } } -void target_manager::update_screen_count(uint32_t count) +void target_manager::update_screen_count(uint32_t count, uint16_t user_prescale, uint16_t max_prescale_size) { // Ensure that there's an entry to fill while (count > m_native_dims.size()) @@ -157,26 +161,26 @@ void target_manager::update_screen_count(uint32_t count) { for (uint32_t screen = old_count; screen < m_screen_count; screen++) { - create_target_if_nonexistent(screen, "output", false, false, TARGET_STYLE_NATIVE); + create_output_if_nonexistent(screen, user_prescale, max_prescale_size); } } } } -void target_manager::create_target_if_nonexistent(uint32_t screen, std::string name, bool double_buffered, bool filter, uint32_t style) +void target_manager::create_output_if_nonexistent(uint32_t screen, uint16_t user_prescale, uint16_t max_prescale_size) { - if (style == TARGET_STYLE_CUSTOM) return; - - if (m_targets.find(name + std::to_string(screen)) != m_targets.end()) + if (m_targets.find("output" + std::to_string(screen)) != m_targets.end()) { return; } - std::vector& sizes = style == TARGET_STYLE_GUEST ? m_guest_dims : m_native_dims; - uint16_t width(sizes[screen].width()); - uint16_t height(sizes[screen].height()); + uint16_t width(m_native_dims[screen].width()); + uint16_t height(m_native_dims[screen].height()); + uint16_t xprescale = user_prescale; + uint16_t yprescale = user_prescale; + bgfx_util::find_prescale_factor(width, height, max_prescale_size, xprescale, yprescale); - create_target(name, bgfx::TextureFormat::BGRA8, width, height, style, double_buffered, filter, 1, screen); + create_target("output", bgfx::TextureFormat::BGRA8, width, height, xprescale, yprescale, TARGET_STYLE_NATIVE, false, false, 1, screen); } uint16_t target_manager::width(uint32_t style, uint32_t screen) diff --git a/src/osd/modules/render/bgfx/targetmanager.h b/src/osd/modules/render/bgfx/targetmanager.h index fa44e2c1bd6..e3406722eda 100644 --- a/src/osd/modules/render/bgfx/targetmanager.h +++ b/src/osd/modules/render/bgfx/targetmanager.h @@ -30,12 +30,13 @@ public: target_manager(texture_manager& textures); ~target_manager(); - bgfx_target* create_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen); + bgfx_target* create_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint16_t xprescale, uint16_t yprescale, + uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen); void destroy_target(std::string name, uint32_t screen = -1); bgfx_target* create_backbuffer(void *handle, uint16_t width, uint16_t height); - bool update_target_sizes(uint32_t screen, uint16_t width, uint16_t height, uint32_t style); - void update_screen_count(uint32_t count); + bool update_target_sizes(uint32_t screen, uint16_t width, uint16_t height, uint32_t style, uint16_t user_prescale, uint16_t max_prescale_size); + void update_screen_count(uint32_t count, uint16_t user_prescale, uint16_t max_prescale_size); // Getters bgfx_target* target(uint32_t screen, std::string name); @@ -43,8 +44,8 @@ public: uint16_t height(uint32_t style, uint32_t screen); private: - void rebuild_targets(uint32_t screen, uint32_t style); - void create_target_if_nonexistent(uint32_t screen, std::string name, bool double_buffered, bool filter, uint32_t style); + void rebuild_targets(uint32_t screen, uint32_t style, uint16_t user_prescale, uint16_t max_prescale_size); + void create_output_if_nonexistent(uint32_t screen, uint16_t user_prescale, uint16_t max_prescale_size); std::map m_targets; texture_manager& m_textures; diff --git a/src/osd/modules/render/bgfx/targetreader.cpp b/src/osd/modules/render/bgfx/targetreader.cpp index e66a147d7ba..549ab78fca6 100644 --- a/src/osd/modules/render/bgfx/targetreader.cpp +++ b/src/osd/modules/render/bgfx/targetreader.cpp @@ -10,6 +10,7 @@ #include +#include "bgfxutil.h" #include "chainmanager.h" #include "target.h" @@ -21,7 +22,7 @@ const target_reader::string_to_enum target_reader::STYLE_NAMES[target_reader::ST { "custom", TARGET_STYLE_CUSTOM } }; -bgfx_target* target_reader::read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index) +bgfx_target* target_reader::read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index, uint16_t user_prescale, uint16_t max_prescale_size) { if (!validate_parameters(value, prefix)) { @@ -37,20 +38,40 @@ bgfx_target* target_reader::read_from_value(const Value& value, std::string pref { scale = int(floor(value["scale"].GetDouble() + 0.5)); } + bool use_user_prescale = get_bool(value, "user_prescale", false); uint16_t width = 0; uint16_t height = 0; + uint16_t xprescale = 1; + uint16_t yprescale = 1; switch (mode) { case TARGET_STYLE_GUEST: + { width = chains.targets().width(TARGET_STYLE_GUEST, screen_index); height = chains.targets().height(TARGET_STYLE_GUEST, screen_index); + + if (use_user_prescale) + { + xprescale = user_prescale; + yprescale = user_prescale; + bgfx_util::find_prescale_factor(width, height, max_prescale_size, xprescale, yprescale); + } break; + } case TARGET_STYLE_NATIVE: width = chains.targets().width(TARGET_STYLE_NATIVE, screen_index); height = chains.targets().height(TARGET_STYLE_NATIVE, screen_index); + + if (use_user_prescale) + { + xprescale = user_prescale; + yprescale = user_prescale; + bgfx_util::find_prescale_factor(width, height, max_prescale_size, xprescale, yprescale); + } break; case TARGET_STYLE_CUSTOM: + READER_WARN(!value.HasMember("user_prescale"), (prefix + "Target '" + target_name + "': user_prescale parameter is not used for custom-type render targets.\n").c_str()); if (!READER_CHECK(value.HasMember("width"), (prefix + "Target '" + target_name + "': Must have numeric value 'width'\n").c_str())) return nullptr; if (!READER_CHECK(value["width"].IsNumber(), (prefix + "Target '" + target_name + "': Value 'width' must be a number\n").c_str())) return nullptr; if (!READER_CHECK(value.HasMember("height"), (prefix + "Target '" + target_name + "': Must have numeric value 'height'\n").c_str())) return nullptr; @@ -60,7 +81,7 @@ bgfx_target* target_reader::read_from_value(const Value& value, std::string pref break; } - return chains.targets().create_target(target_name, bgfx::TextureFormat::BGRA8, width, height, mode, double_buffer, bilinear, scale, screen_index); + return chains.targets().create_target(target_name, bgfx::TextureFormat::BGRA8, width, height, xprescale, yprescale, mode, double_buffer, bilinear, scale, screen_index); } bool target_reader::validate_parameters(const Value& value, std::string prefix) @@ -71,6 +92,7 @@ bool target_reader::validate_parameters(const Value& value, std::string prefix) if (!READER_CHECK(value["mode"].IsString(), (prefix + "Value 'mode' must be a string (what screens does this apply to?)\n").c_str())) return false; if (!READER_CHECK(!value.HasMember("bilinear") || value["bilinear"].IsBool(), (prefix + "Value 'bilinear' must be a boolean\n").c_str())) return false; if (!READER_CHECK(!value.HasMember("doublebuffer") || value["doublebuffer"].IsBool(), (prefix + "Value 'doublebuffer' must be a boolean\n").c_str())) return false; + if (!READER_CHECK(!value.HasMember("user_prescale") || value["user_prescale"].IsBool(), (prefix + "Value 'user_prescale' must be a boolean\n").c_str())) return false; if (!READER_CHECK(!value.HasMember("scale") || value["scale"].IsNumber(), (prefix + "Value 'scale' must be a numeric value\n").c_str())) return false; return true; } diff --git a/src/osd/modules/render/bgfx/targetreader.h b/src/osd/modules/render/bgfx/targetreader.h index 7edf5e456fa..f77949c7ad4 100644 --- a/src/osd/modules/render/bgfx/targetreader.h +++ b/src/osd/modules/render/bgfx/targetreader.h @@ -21,7 +21,7 @@ class chain_manager; class target_reader : public state_reader { public: - static bgfx_target* read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index); + static bgfx_target* read_from_value(const Value& value, std::string prefix, chain_manager& chains, uint32_t screen_index, uint16_t user_prescale, uint16_t max_prescale_size); private: static bool validate_parameters(const Value& value, std::string prefix); diff --git a/src/osd/modules/render/bgfx/texture.cpp b/src/osd/modules/render/bgfx/texture.cpp index a504c625415..2ffa97c0b6f 100644 --- a/src/osd/modules/render/bgfx/texture.cpp +++ b/src/osd/modules/render/bgfx/texture.cpp @@ -10,10 +10,11 @@ #include "texture.h" -bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t flags, void* data) +bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t width_margin, uint16_t height, uint32_t flags, void* data) : m_name(name) , m_format(format) , m_width(width) + , m_width_margin(width_margin) , m_height(height) , m_rowpixels(width) , m_width_div_factor(1) @@ -35,10 +36,11 @@ bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, u } } -bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, const bgfx::Memory* data, uint32_t flags, uint16_t pitch, uint16_t rowpixels, int width_div_factor, int width_mul_factor) +bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t width_margin, uint16_t height, const bgfx::Memory* data, uint32_t flags, uint16_t pitch, uint16_t rowpixels, int width_div_factor, int width_mul_factor) : m_name(name) , m_format(format) , m_width(width) + , m_width_margin(width_margin) , m_height(height) , m_rowpixels(rowpixels ? rowpixels : width) , m_width_div_factor(width_div_factor) @@ -56,7 +58,8 @@ bgfx_texture::~bgfx_texture() bgfx::destroy(m_texture); } -void bgfx_texture::update(const bgfx::Memory *data, uint16_t pitch) +void bgfx_texture::update(const bgfx::Memory *data, uint16_t pitch, uint16_t width_margin) { + m_width_margin = width_margin; bgfx::updateTexture2D(m_texture, 0, 0, 0, 0, (m_rowpixels * m_width_mul_factor) / m_width_div_factor, m_height, data, pitch); } diff --git a/src/osd/modules/render/bgfx/texture.h b/src/osd/modules/render/bgfx/texture.h index 75fedcd3129..ced0604dfcf 100644 --- a/src/osd/modules/render/bgfx/texture.h +++ b/src/osd/modules/render/bgfx/texture.h @@ -20,8 +20,8 @@ class bgfx_texture : public bgfx_texture_handle_provider { public: - bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t flags, void* data); - bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, const bgfx::Memory* data, uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP, uint16_t pitch = UINT16_MAX, uint16_t rowpixels = 0, int width_div_factor = 1, int width_mul_factor = 1); + bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t width_margin, uint16_t height, uint32_t flags, void* data); + bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t width_margin, uint16_t height, const bgfx::Memory* data, uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP, uint16_t pitch = UINT16_MAX, uint16_t rowpixels = 0, int width_div_factor = 1, int width_mul_factor = 1); virtual ~bgfx_texture(); // Getters @@ -32,17 +32,19 @@ public: virtual bgfx::TextureHandle texture() const override { return m_texture; } virtual bool is_target() const override { return false; } virtual uint16_t width() const override { return m_width; } + virtual uint16_t width_margin() const override { return m_width_margin; } virtual uint16_t height() const override { return m_height; } virtual uint16_t rowpixels() const override { return m_rowpixels; } virtual int width_div_factor() const override { return m_width_div_factor; } virtual int width_mul_factor() const override { return m_width_mul_factor; } - void update(const bgfx::Memory *data, uint16_t pitch = UINT16_MAX); + void update(const bgfx::Memory *data, uint16_t pitch = UINT16_MAX, uint16_t width_margin = 0); protected: std::string m_name; bgfx::TextureFormat::Enum m_format; uint16_t m_width; + uint16_t m_width_margin; uint16_t m_height; uint16_t m_rowpixels; int m_width_div_factor; diff --git a/src/osd/modules/render/bgfx/texturehandleprovider.h b/src/osd/modules/render/bgfx/texturehandleprovider.h index 14fb2fe892c..aa6a41157e2 100644 --- a/src/osd/modules/render/bgfx/texturehandleprovider.h +++ b/src/osd/modules/render/bgfx/texturehandleprovider.h @@ -23,6 +23,7 @@ public: virtual bgfx::TextureHandle texture() const = 0; virtual bool is_target() const = 0; virtual uint16_t width() const = 0; + virtual uint16_t width_margin() const = 0; virtual uint16_t height() const = 0; virtual uint16_t rowpixels() const = 0; virtual int width_div_factor() const = 0; diff --git a/src/osd/modules/render/bgfx/texturemanager.cpp b/src/osd/modules/render/bgfx/texturemanager.cpp index 82225f87eb0..31b7c02e31b 100644 --- a/src/osd/modules/render/bgfx/texturemanager.cpp +++ b/src/osd/modules/render/bgfx/texturemanager.cpp @@ -50,9 +50,9 @@ void texture_manager::add_provider(std::string name, bgfx_texture_handle_provide } } -bgfx_texture* texture_manager::create_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, void* data, uint32_t flags) +bgfx_texture* texture_manager::create_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t width_margin, uint32_t height, void* data, uint32_t flags) { - auto* texture = new bgfx_texture(name, format, width, height, flags, data); + auto* texture = new bgfx_texture(name, format, width, width_margin, height, flags, data); m_textures[name] = texture; return texture; } @@ -89,14 +89,14 @@ bgfx_texture* texture_manager::create_png_texture(std::string path, std::string { texture_name += std::to_string(screen); } - bgfx_texture* texture = create_texture(texture_name, bgfx::TextureFormat::BGRA8, width, height, data, flags); + bgfx_texture* texture = create_texture(texture_name, bgfx::TextureFormat::BGRA8, width, 0, height, data, flags); delete [] data; return texture; } -bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t format, int width, int height +bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t format, int width, int width_margin, int height , int rowpixels, const rgb_t *palette, void *base, uint32_t seqid, uint32_t flags, uint64_t key, uint64_t old_key) { bgfx::TextureHandle handle = BGFX_INVALID_HANDLE; @@ -126,8 +126,8 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form uint16_t pitch = width; int width_div_factor = 1; int width_mul_factor = 1; - const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, rowpixels, height, palette, base, pitch, width_div_factor, width_mul_factor); - bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)((rowpixels * width_mul_factor) / width_div_factor), (uint16_t)height, mem, pitch); + const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, rowpixels, width_margin, height, palette, base, pitch, width_div_factor, width_mul_factor); + bgfx::updateTexture2D(handle, 0, 0, 0, 0, uint16_t((rowpixels * width_mul_factor) / width_div_factor), uint16_t(height), mem, pitch); return handle; } } @@ -156,8 +156,8 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form uint16_t pitch = width; int width_div_factor = 1; int width_mul_factor = 1; - const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, rowpixels, height, palette, base, pitch, width_div_factor, width_mul_factor); - bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)((rowpixels * width_mul_factor) / width_div_factor), (uint16_t)height, mem, pitch); + const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, rowpixels, width_margin, height, palette, base, pitch, width_div_factor, width_mul_factor); + bgfx::updateTexture2D(handle, 0, 0, 0, 0, uint16_t((rowpixels * width_mul_factor) / width_div_factor), uint16_t(height), mem, pitch); return handle; } } @@ -169,10 +169,10 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form uint16_t pitch = width; int width_div_factor = 1; int width_mul_factor = 1; - const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, rowpixels, height, palette, base, pitch, width_div_factor, width_mul_factor); - const uint16_t adjusted_width = (uint16_t)((rowpixels * width_mul_factor) / width_div_factor); + const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, rowpixels, width_margin, height, palette, base, pitch, width_div_factor, width_mul_factor); + const uint16_t adjusted_width = uint16_t((rowpixels * width_mul_factor) / width_div_factor); handle = bgfx::createTexture2D(adjusted_width, height, false, 1, dst_format, flags, nullptr); - bgfx::updateTexture2D(handle, 0, 0, 0, 0, adjusted_width, (uint16_t)height, mem, pitch); + bgfx::updateTexture2D(handle, 0, 0, 0, 0, adjusted_width, uint16_t(height), mem, pitch); m_mame_textures[key] = { handle, seqid, width, height }; return handle; diff --git a/src/osd/modules/render/bgfx/texturemanager.h b/src/osd/modules/render/bgfx/texturemanager.h index db71f07c0fa..904837e917b 100644 --- a/src/osd/modules/render/bgfx/texturemanager.h +++ b/src/osd/modules/render/bgfx/texturemanager.h @@ -30,12 +30,12 @@ public: texture_manager() { } ~texture_manager(); - bgfx_texture* create_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, void* data = nullptr, uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP); + bgfx_texture* create_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t width_margin, uint32_t height, void* data = nullptr, uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP); bgfx_texture* create_png_texture(std::string path, std::string file_name, std::string texture_name, uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP, uint32_t screen = -1); void add_provider(std::string name, bgfx_texture_handle_provider* texture); void remove_provider(std::string name, bool delete_provider = false); - bgfx::TextureHandle create_or_update_mame_texture(uint32_t format, int width, int height - , int rowpixels, const rgb_t *palette, void *base, uint32_t seqid, uint32_t flags, uint64_t key, uint64_t old_key); + bgfx::TextureHandle create_or_update_mame_texture(uint32_t format, int width, int width_margin, int height, + int rowpixels, const rgb_t *palette, void *base, uint32_t seqid, uint32_t flags, uint64_t key, uint64_t old_key); // Getters bgfx::TextureHandle handle(std::string name); diff --git a/src/osd/modules/render/bgfx/uniformreader.cpp b/src/osd/modules/render/bgfx/uniformreader.cpp index f2bf1114ec6..e71ce34c282 100644 --- a/src/osd/modules/render/bgfx/uniformreader.cpp +++ b/src/osd/modules/render/bgfx/uniformreader.cpp @@ -37,7 +37,7 @@ bgfx_uniform* uniform_reader::read_from_value(const Value& value, std::string pr unsigned int index = 0; for (; index < type_size / 4 && index < value_array.Size(); index++) { - data[index] = (float)value_array[index].GetDouble(); + data[index] = float(value_array[index].GetDouble()); } for (; index < type_size / 4; index++) @@ -45,7 +45,7 @@ bgfx_uniform* uniform_reader::read_from_value(const Value& value, std::string pr data[index] = 0.0f; } - auto* uniform = new bgfx_uniform(name, type); + bgfx_uniform* uniform = new bgfx_uniform(name, type); uniform->set((void*)data, type_size); delete [] data; diff --git a/src/osd/modules/render/bgfx/view.h b/src/osd/modules/render/bgfx/view.h index a1793f89d0b..577663ea525 100644 --- a/src/osd/modules/render/bgfx/view.h +++ b/src/osd/modules/render/bgfx/view.h @@ -21,7 +21,7 @@ public: , m_view_height(0) , m_z_near(0.0f) , m_z_far(100.0f) - , m_clear_color(0) + , m_clear_color(0x000000ff) , m_clear_depth(1.0f) , m_clear_stencil(0) , m_do_clear_color(true) diff --git a/src/osd/modules/render/bgfxutil.cpp b/src/osd/modules/render/bgfxutil.cpp index e864cb98fb4..3d555bb60ad 100644 --- a/src/osd/modules/render/bgfxutil.cpp +++ b/src/osd/modules/render/bgfxutil.cpp @@ -14,10 +14,11 @@ #include "render.h" -const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::TextureFormat::Enum &dst_format, uint32_t src_format, int rowpixels, int height, const rgb_t *palette, void *base, uint16_t &out_pitch, int &width_div_factor, int &width_mul_factor) +const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::TextureFormat::Enum &dst_format, uint32_t src_format, int rowpixels, int width_margin, int height, const rgb_t *palette, void *base, uint16_t &out_pitch, int &width_div_factor, int &width_mul_factor) { bgfx::TextureInfo info; const bgfx::Memory *data = nullptr; + uint8_t *adjusted_base = (uint8_t *)base; switch (src_format) { @@ -28,7 +29,11 @@ const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::Text out_pitch = rowpixels * 2; bgfx::calcTextureSize(info, rowpixels / width_div_factor, height, 1, false, false, 1, dst_format); - data = bgfx::copy(base, info.storageSize); + if (width_margin) + { + adjusted_base -= width_margin * 2; + } + data = bgfx::copy(adjusted_base, info.storageSize); break; case PRIMFLAG_TEXFORMAT(TEXFORMAT_PALETTE16): dst_format = bgfx::TextureFormat::R8; @@ -37,7 +42,11 @@ const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::Text out_pitch = rowpixels * 2; bgfx::calcTextureSize(info, rowpixels * width_mul_factor, height, 1, false, false, 1, dst_format); - data = bgfx::copy(base, info.storageSize); + if (width_margin) + { + adjusted_base -= width_margin * 2; + } + data = bgfx::copy(adjusted_base, info.storageSize); break; case PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32): case PRIMFLAG_TEXFORMAT(TEXFORMAT_RGB32): @@ -47,7 +56,11 @@ const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::Text out_pitch = rowpixels * 4; bgfx::calcTextureSize(info, rowpixels, height, 1, false, false, 1, dst_format); - data = bgfx::copy(base, info.storageSize); + if (width_margin) + { + adjusted_base -= width_margin * 4; + } + data = bgfx::copy(adjusted_base, info.storageSize); break; } @@ -96,6 +109,7 @@ uint64_t bgfx_util::get_blend_state(uint32_t blend) case BLENDMODE_ALPHA: return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA); case BLENDMODE_RGB_MULTIPLY: + //return BGFX_STATE_BLEND_FUNC_SEPARATE(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_INV_SRC_COLOR, BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ZERO); return BGFX_STATE_BLEND_FUNC_SEPARATE(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_DST_ALPHA, BGFX_STATE_BLEND_ZERO); case BLENDMODE_ADD: return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_ONE); @@ -104,3 +118,15 @@ uint64_t bgfx_util::get_blend_state(uint32_t blend) } return 0L; } + +void bgfx_util::find_prescale_factor(uint16_t width, uint16_t height, uint16_t max_prescale_size, uint16_t &xprescale, uint16_t &yprescale) +{ + while (xprescale > 1 && width * xprescale > max_prescale_size) + { + xprescale--; + } + while (yprescale > 1 && height * yprescale > max_prescale_size) + { + yprescale--; + } +} diff --git a/src/osd/modules/render/bgfxutil.h b/src/osd/modules/render/bgfxutil.h index db07e7fba77..aa108a6fb3b 100644 --- a/src/osd/modules/render/bgfxutil.h +++ b/src/osd/modules/render/bgfxutil.h @@ -15,9 +15,10 @@ class bgfx_util { public: - static const bgfx::Memory* mame_texture_data_to_bgfx_texture_data(bgfx::TextureFormat::Enum &dst_format, uint32_t format, int rowpixels, int height, const rgb_t *palette, void *base, uint16_t &out_pitch, int &width_div_factor, int &width_mul_factor); + static const bgfx::Memory* mame_texture_data_to_bgfx_texture_data(bgfx::TextureFormat::Enum &dst_format, uint32_t format, int rowpixels, int width_margin, int height, const rgb_t *palette, void *base, uint16_t &out_pitch, int &width_div_factor, int &width_mul_factor); static const bgfx::Memory* mame_texture_data_to_bgra32(uint32_t src_format, int width, int height, int rowpixels, const rgb_t *palette, void *base); static uint64_t get_blend_state(uint32_t blend); + static void find_prescale_factor(uint16_t width, uint16_t height, uint16_t max_prescale_size, uint16_t &xprescale, uint16_t &yprescale); }; #endif // RENDER_BGFX_UTIL diff --git a/src/osd/modules/render/binpacker.h b/src/osd/modules/render/binpacker.h index 1fb84596eec..52efe4abb85 100644 --- a/src/osd/modules/render/binpacker.h +++ b/src/osd/modules/render/binpacker.h @@ -29,7 +29,7 @@ public: class packable_rectangle { public: - packable_rectangle() : m_hash(0), m_width(-1), m_height(-1) { } + packable_rectangle() = default; packable_rectangle(uint32_t hash, uint32_t format, int width, int height, int rowpixels, const rgb_t *palette, void *base) : m_hash(hash) , m_format(format) @@ -50,19 +50,19 @@ public: void* base() const { return m_base; } private: - uint32_t m_hash; - uint32_t m_format; - int m_width; - int m_height; - int m_rowpixels; - const rgb_t* m_palette; - void* m_base; + uint32_t m_hash = 0; + uint32_t m_format = 0; + int m_width = -1; + int m_height = -1; + int m_rowpixels = 0; + const rgb_t* m_palette = nullptr; + void* m_base = nullptr; }; class packed_rectangle { public: - packed_rectangle() : m_hash(0), m_format(0), m_width(-1), m_height(-1), m_x(-1), m_y(-1), m_rowpixels(0), m_palette(nullptr), m_base(nullptr) { } + packed_rectangle() = default; packed_rectangle(const packed_rectangle& rect) : m_hash(rect.m_hash) , m_format(rect.m_format) @@ -99,15 +99,15 @@ public: void* base() const { return m_base; } private: - uint32_t m_hash; - uint32_t m_format; - int m_width; - int m_height; - int m_x; - int m_y; - int m_rowpixels; - const rgb_t* m_palette; - void* m_base; + uint32_t m_hash = 0; + uint32_t m_format = 0; + int m_width = -1; + int m_height = -1; + int m_x = -1; + int m_y = -1; + int m_rowpixels = 0; + const rgb_t* m_palette = nullptr; + void* m_base = nullptr; }; bool pack(const std::vector& rects, std::vector>& packs, int pack_size); diff --git a/src/osd/modules/render/d3d/d3dcomm.h b/src/osd/modules/render/d3d/d3dcomm.h index c7dc58c6340..2d7548a242a 100644 --- a/src/osd/modules/render/d3d/d3dcomm.h +++ b/src/osd/modules/render/d3d/d3dcomm.h @@ -170,7 +170,7 @@ class poly_info public: void init(D3DPRIMITIVETYPE type, uint32_t count, uint32_t numverts, uint32_t flags, texture_info *texture, uint32_t modmode, - float prim_width, float prim_height) + float prim_width, float prim_height, uint32_t tint) { m_type = type; m_count = count; @@ -180,6 +180,7 @@ public: m_modmode = modmode; m_prim_width = prim_width; m_prim_height = prim_height; + m_tint = tint; } D3DPRIMITIVETYPE type() const { return m_type; } @@ -193,6 +194,8 @@ public: float prim_width() const { return m_prim_width; } float prim_height() const { return m_prim_height; } + DWORD tint() const { return m_tint; } + private: D3DPRIMITIVETYPE m_type; // type of primitive uint32_t m_count; // total number of primitives @@ -204,6 +207,8 @@ private: float m_prim_width; // used by quads float m_prim_height; // used by quads + + uint32_t m_tint; // color tint for primitive }; /* vertex describes a single vertex */ diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 0616af498e5..8c59649f64a 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -174,7 +174,8 @@ shaders::shaders() : post_fx_enable(false), oversampling_enable(false), num_screens(0), - curr_screen(0), + num_targets(0), + curr_target(0), acc_t(0), delta_t(0), shadow_texture(nullptr), @@ -195,7 +196,11 @@ shaders::shaders() : backbuffer(nullptr), curr_effect(nullptr), default_effect(nullptr), + ui_effect(nullptr), + ui_wrap_effect(nullptr), + vector_buffer_effect(nullptr), prescale_effect(nullptr), + prescale_point_effect(nullptr), post_effect(nullptr), distortion_effect(nullptr), scanline_effect(nullptr), @@ -208,11 +213,13 @@ shaders::shaders() : downsample_effect(nullptr), vector_effect(nullptr), chroma_effect(nullptr), + diffuse_texture(nullptr), curr_texture(nullptr), curr_render_target(nullptr), curr_poly(nullptr), d3dx_create_effect_from_file_ptr(nullptr) { + std::fill(std::begin(target_to_screen), std::end(target_to_screen), 0); } @@ -440,20 +447,28 @@ void shaders::set_texture(texture_info *texture) return; } - // set initial texture to use - texture_info *default_texture = d3d->get_default_texture(); - default_effect->set_texture("Diffuse", (texture == nullptr) ? default_texture->get_finaltex() : texture->get_finaltex()); - if (options->yiq_enable) + if (texture) { - ntsc_effect->set_texture("Diffuse", (texture == nullptr) ? default_texture->get_finaltex() : texture->get_finaltex()); + diffuse_texture = texture; } else { - color_effect->set_texture("Diffuse", (texture == nullptr) ? default_texture->get_finaltex() : texture->get_finaltex()); + diffuse_texture = d3d->get_default_texture(); } } +//============================================================ +// shaders::set_filter - indicates if screens should be +// filtered on upscaling +//============================================================ + +void shaders::set_filter(bool filter_screens) +{ + this->filter_screens = filter_screens; +} + + //============================================================ // shaders::init //============================================================ @@ -496,8 +511,6 @@ bool shaders::init(d3d_base *d3dintf, running_machine *machine, renderer_d3d9 *r this->machine = machine; this->d3d = renderer; - enumerate_screens(); - auto &winoptions = downcast(machine->options()); post_fx_enable = winoptions.d3d_hlsl_enable(); @@ -612,12 +625,71 @@ bool shaders::init(d3d_base *d3dintf, running_machine *machine, renderer_d3d9 *r } +//============================================================ +// shaders::begin_frame +// +// Enumerates the total number of screen textures present. +// +// Additionally, ensures the presence of necessary post- +// processing geometry. +// +//============================================================ + +void shaders::begin_frame(render_primitive_list *primlist) +{ + init_fsfx_quad(); + + std::fill(std::begin(target_to_screen), std::end(target_to_screen), 0); + std::fill(std::begin(targets_per_screen), std::end(targets_per_screen), 0); + render_container *containers[std::size(target_to_screen)]; + + // Maximum potential runtime O(max_num_targets^2) + num_targets = 0; + num_screens = 0; + curr_target = 0; + for (render_primitive &prim : *primlist) + { + if (PRIMFLAG_GET_SCREENTEX(prim.flags)) + { + containers[num_targets] = prim.container; + int screen_index = 0; + for (; screen_index < num_screens && containers[screen_index] != prim.container; screen_index++); + target_to_screen[num_targets] = screen_index; + targets_per_screen[screen_index]++; + if (screen_index >= num_screens) + num_screens++; + num_targets++; + } + } + + diffuse_texture = d3d->get_default_texture(); +} + + +//============================================================ +// shaders::end_frame +// +// Closes out any still-active effects at the end of +// rendering. +// +//============================================================ + +void shaders::end_frame() +{ + if (curr_effect->is_active()) + { + curr_effect->end(); + } +} + + //============================================================ // shaders::init_fsfx_quad // // Called always at the start of each frame so that the two // triangles used for the post-processing effects are always -// at the beginning of the vertex buffer +// at the beginning of the vertex buffer. +// //============================================================ void shaders::init_fsfx_quad() @@ -801,9 +873,13 @@ int shaders::create_resources() const char *fx_dir = downcast(machine->options()).screen_post_fx_dir(); default_effect = new effect(this, d3d->get_device(), "primary.fx", fx_dir); + ui_effect = new effect(this, d3d->get_device(), "primary.fx", fx_dir); + ui_wrap_effect = new effect(this, d3d->get_device(), "primary.fx", fx_dir); + vector_buffer_effect = new effect(this, d3d->get_device(), "primary.fx", fx_dir); post_effect = new effect(this, d3d->get_device(), "post.fx", fx_dir); distortion_effect = new effect(this, d3d->get_device(), "distortion.fx", fx_dir); prescale_effect = new effect(this, d3d->get_device(), "prescale.fx", fx_dir); + prescale_point_effect = new effect(this, d3d->get_device(), "prescale.fx", fx_dir); phosphor_effect = new effect(this, d3d->get_device(), "phosphor.fx", fx_dir); focus_effect = new effect(this, d3d->get_device(), "focus.fx", fx_dir); scanline_effect = new effect(this, d3d->get_device(), "scanline.fx", fx_dir); @@ -816,9 +892,13 @@ int shaders::create_resources() chroma_effect = new effect(this, d3d->get_device(), "chroma.fx", fx_dir); if (!default_effect->is_valid() || + !ui_effect->is_valid() || + !ui_wrap_effect->is_valid() || + !vector_buffer_effect->is_valid() || !post_effect->is_valid() || !distortion_effect->is_valid() || !prescale_effect->is_valid() || + !prescale_point_effect->is_valid() || !phosphor_effect->is_valid() || !focus_effect->is_valid() || !scanline_effect->is_valid() || @@ -833,18 +913,21 @@ int shaders::create_resources() return 1; } - std::array effects = { + std::array effects = { default_effect, + ui_effect, + ui_wrap_effect, + vector_buffer_effect, post_effect, distortion_effect, prescale_effect, + prescale_point_effect, phosphor_effect, focus_effect, scanline_effect, deconverge_effect, color_effect, ntsc_effect, - color_effect, bloom_effect, downsample_effect, vector_effect, @@ -853,12 +936,10 @@ int shaders::create_resources() for (int i = 0; i < effects.size(); i++) { - effects[i]->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); effects[i]->add_uniform("TargetDims", uniform::UT_VEC2, uniform::CU_TARGET_DIMS); effects[i]->add_uniform("TargetScale", uniform::UT_FLOAT, uniform::CU_TARGET_SCALE); effects[i]->add_uniform("ScreenDims", uniform::UT_VEC2, uniform::CU_SCREEN_DIMS); effects[i]->add_uniform("ScreenCount", uniform::UT_INT, uniform::CU_SCREEN_COUNT); - effects[i]->add_uniform("QuadDims", uniform::UT_VEC2, uniform::CU_QUAD_DIMS); effects[i]->add_uniform("SwapXY", uniform::UT_BOOL, uniform::CU_SWAP_XY); effects[i]->add_uniform("VectorScreen", uniform::UT_BOOL, uniform::CU_VECTOR_SCREEN); } @@ -873,6 +954,7 @@ int shaders::create_resources() ntsc_effect->add_uniform("IFreqResponse", uniform::UT_FLOAT, uniform::CU_NTSC_IFREQ); ntsc_effect->add_uniform("QFreqResponse", uniform::UT_FLOAT, uniform::CU_NTSC_QFREQ); ntsc_effect->add_uniform("ScanTime", uniform::UT_FLOAT, uniform::CU_NTSC_HTIME); + ntsc_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); color_effect->add_uniform("RedRatios", uniform::UT_VEC3, uniform::CU_COLOR_RED_RATIOS); color_effect->add_uniform("GrnRatios", uniform::UT_VEC3, uniform::CU_COLOR_GRN_RATIOS); @@ -880,6 +962,7 @@ int shaders::create_resources() color_effect->add_uniform("Offset", uniform::UT_VEC3, uniform::CU_COLOR_OFFSET); color_effect->add_uniform("Scale", uniform::UT_VEC3, uniform::CU_COLOR_SCALE); color_effect->add_uniform("Saturation", uniform::UT_FLOAT, uniform::CU_COLOR_SATURATION); + color_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); deconverge_effect->add_uniform("ConvergeX", uniform::UT_VEC3, uniform::CU_CONVERGE_LINEAR_X); deconverge_effect->add_uniform("ConvergeY", uniform::UT_VEC3, uniform::CU_CONVERGE_LINEAR_Y); @@ -892,6 +975,8 @@ int shaders::create_resources() scanline_effect->add_uniform("ScanlineVariation", uniform::UT_FLOAT, uniform::CU_POST_SCANLINE_VARIATION); scanline_effect->add_uniform("ScanlineBrightScale", uniform::UT_FLOAT, uniform::CU_POST_SCANLINE_BRIGHT_SCALE); scanline_effect->add_uniform("ScanlineBrightOffset", uniform::UT_FLOAT, uniform::CU_POST_SCANLINE_BRIGHT_OFFSET); + scanline_effect->add_uniform("QuadDims", uniform::UT_VEC2, uniform::CU_QUAD_DIMS); + scanline_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); focus_effect->add_uniform("Defocus", uniform::UT_VEC2, uniform::CU_FOCUS_SIZE); @@ -904,9 +989,15 @@ int shaders::create_resources() post_effect->add_uniform("Floor", uniform::UT_VEC3, uniform::CU_POST_FLOOR); post_effect->add_uniform("ChomaMode", uniform::UT_INT, uniform::CU_CHROMA_MODE); post_effect->add_uniform("ConversionGain", uniform::UT_VEC3, uniform::CU_CHROMA_CONVERSION_GAIN); + post_effect->add_uniform("QuadDims", uniform::UT_VEC2, uniform::CU_QUAD_DIMS); + post_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); phosphor_effect->add_uniform("Phosphor", uniform::UT_VEC3, uniform::CU_PHOSPHOR_LIFE); + bloom_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); + + downsample_effect->add_uniform("QuadDims", uniform::UT_VEC2, uniform::CU_QUAD_DIMS); + chroma_effect->add_uniform("YGain", uniform::UT_VEC3, uniform::CU_CHROMA_Y_GAIN); chroma_effect->add_uniform("ChromaA", uniform::UT_VEC2, uniform::CU_CHROMA_A); chroma_effect->add_uniform("ChromaB", uniform::UT_VEC2, uniform::CU_CHROMA_B); @@ -919,10 +1010,24 @@ int shaders::create_resources() distortion_effect->add_uniform("RoundCornerAmount", uniform::UT_FLOAT, uniform::CU_POST_ROUND_CORNER); distortion_effect->add_uniform("SmoothBorderAmount", uniform::UT_FLOAT, uniform::CU_POST_SMOOTH_BORDER); distortion_effect->add_uniform("ReflectionAmount", uniform::UT_FLOAT, uniform::CU_POST_REFLECTION); + distortion_effect->add_uniform("QuadDims", uniform::UT_VEC2, uniform::CU_QUAD_DIMS); + + prescale_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); + + prescale_point_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); default_effect->add_uniform("LutEnable", uniform::UT_BOOL, uniform::CU_LUT_ENABLE); default_effect->add_uniform("UiLutEnable", uniform::UT_BOOL, uniform::CU_UI_LUT_ENABLE); + ui_effect->add_uniform("LutEnable", uniform::UT_BOOL, uniform::CU_LUT_ENABLE); + ui_effect->add_uniform("UiLutEnable", uniform::UT_BOOL, uniform::CU_UI_LUT_ENABLE); + + ui_wrap_effect->add_uniform("LutEnable", uniform::UT_BOOL, uniform::CU_LUT_ENABLE); + ui_wrap_effect->add_uniform("UiLutEnable", uniform::UT_BOOL, uniform::CU_UI_LUT_ENABLE); + + vector_buffer_effect->add_uniform("LutEnable", uniform::UT_BOOL, uniform::CU_LUT_ENABLE); + vector_buffer_effect->add_uniform("UiLutEnable", uniform::UT_BOOL, uniform::CU_UI_LUT_ENABLE); + return 0; } @@ -940,7 +1045,7 @@ void shaders::begin_draw() return; } - curr_screen = 0; + curr_target = 0; curr_effect = default_effect; // Update for delta_time t = machine->time().as_double(); @@ -948,9 +1053,13 @@ void shaders::begin_draw() acc_t = t; default_effect->set_technique("ScreenTechnique"); + ui_effect->set_technique("UiTechnique"); + ui_wrap_effect->set_technique("UiWrapTechnique"); + vector_buffer_effect->set_technique("VectorBufferTechnique"); post_effect->set_technique("DefaultTechnique"); distortion_effect->set_technique("DefaultTechnique"); prescale_effect->set_technique("DefaultTechnique"); + prescale_point_effect->set_technique("PointTechnique"); phosphor_effect->set_technique("DefaultTechnique"); focus_effect->set_technique("DefaultTechnique"); scanline_effect->set_technique("DefaultTechnique"); @@ -971,6 +1080,24 @@ void shaders::begin_draw() } +//============================================================ +// shaders::set_curr_effect +//============================================================ + +void shaders::set_curr_effect(effect *curr_effect) +{ + if (this->curr_effect == curr_effect) + { + return; + } + if (this->curr_effect->is_active()) + { + this->curr_effect->end(); + } + this->curr_effect = curr_effect; +} + + //============================================================ // shaders::blit //============================================================ @@ -1002,24 +1129,17 @@ void shaders::blit( } } - UINT num_passes = 0; - curr_effect->begin(&num_passes, 0); - - for (UINT pass = 0; pass < num_passes; pass++) + if (!curr_effect->is_active()) { - curr_effect->begin_pass(pass); - - // add the primitives - result = d3d->get_device()->DrawPrimitive(prim_type, prim_index, prim_count); - if (FAILED(result)) - { - osd_printf_verbose("Direct3D: Error %08lX during device DrawPrimitive call\n", result); - } - - curr_effect->end_pass(); + curr_effect->begin(0); } - curr_effect->end(); + // add the primitives + result = d3d->get_device()->DrawPrimitive(prim_type, prim_index, prim_count); + if (FAILED(result)) + { + osd_printf_verbose("Direct3D: Error %08lX during device DrawPrimitive call\n", result); + } } //============================================================ @@ -1056,7 +1176,8 @@ int shaders::ntsc_pass(d3d_render_target *rt, int source_index, poly_info *poly, // initial "Diffuse" texture is set in shaders::set_texture() - curr_effect = ntsc_effect; + set_curr_effect(ntsc_effect); + curr_effect->set_texture("Diffuse", diffuse_texture->get_finaltex()); curr_effect->update_uniforms(); curr_effect->set_float("SignalOffset", signal_offset); @@ -1112,10 +1233,18 @@ int shaders::color_convolution_pass(d3d_render_target *rt, int source_index, pol { int next_index = source_index; - curr_effect = color_effect; - curr_effect->update_uniforms(); + set_curr_effect(color_effect); - // initial "Diffuse" texture is set in shaders::set_texture() or the result of shaders::ntsc_pass() + // initial "Diffuse" texture is set in shaders::ntsc_pass() if NTSC processing is enabled + if (!options->yiq_enable) + { + curr_effect->set_texture("Diffuse", diffuse_texture->get_finaltex()); + } + + curr_effect->update_uniforms(); + uint32_t tint = (uint32_t)poly->tint(); + float prim_tint[3] = { ((tint >> 16) & 0xff) / 255.0f, ((tint >> 8) & 0xff) / 255.0f, (tint & 0xff) / 255.0f }; + curr_effect->set_vector("PrimTint", 3, prim_tint); next_index = rt->next_index(next_index); blit(rt->source_surface[next_index], false, D3DPT_TRIANGLELIST, 0, 2); @@ -1127,7 +1256,7 @@ int shaders::prescale_pass(d3d_render_target *rt, int source_index, poly_info *p { int next_index = source_index; - curr_effect = prescale_effect; + set_curr_effect(filter_screens ? prescale_effect : prescale_point_effect); curr_effect->update_uniforms(); curr_effect->set_texture("Diffuse", rt->source_texture[next_index]); @@ -1150,7 +1279,7 @@ int shaders::deconverge_pass(d3d_render_target *rt, int source_index, poly_info return next_index; } - curr_effect = deconverge_effect; + set_curr_effect(deconverge_effect); curr_effect->update_uniforms(); curr_effect->set_texture("Diffuse", rt->target_texture[next_index]); @@ -1165,12 +1294,12 @@ int shaders::scanline_pass(d3d_render_target *rt, int source_index, poly_info *p int next_index = source_index; // skip scanline if alpha is 0 - if (options->scanline_alpha == 0.0f) - return next_index; + //if (options->scanline_alpha == 0.0f) + //return next_index; auto win = d3d->assert_window(); screen_device_enumerator screen_iterator(machine->root_device()); - screen_device *screen = screen_iterator.byindex(curr_screen); + screen_device *screen = screen_iterator.byindex(target_to_screen[curr_target]); render_container &screen_container = screen->container(); float xscale = 1.0f / screen_container.xscale(); float yscale = 1.0f / screen_container.yscale(); @@ -1179,7 +1308,7 @@ int shaders::scanline_pass(d3d_render_target *rt, int source_index, poly_info *p float screen_scale[] = { xscale, yscale }; float screen_offset[] = { xoffset, yoffset }; - curr_effect = scanline_effect; + set_curr_effect(scanline_effect); curr_effect->update_uniforms(); curr_effect->set_texture("Diffuse", rt->target_texture[next_index]); curr_effect->set_vector("ScreenScale", 2, screen_scale); @@ -1202,7 +1331,7 @@ int shaders::defocus_pass(d3d_render_target *rt, int source_index, poly_info *po return next_index; } - curr_effect = focus_effect; + set_curr_effect(focus_effect); curr_effect->update_uniforms(); curr_effect->set_texture("Diffuse", rt->target_texture[next_index]); @@ -1223,7 +1352,7 @@ int shaders::phosphor_pass(d3d_render_target *rt, int source_index, poly_info *p } // Shader needs time between last update - curr_effect = phosphor_effect; + set_curr_effect(phosphor_effect); curr_effect->update_uniforms(); curr_effect->set_texture("Diffuse", rt->target_texture[next_index]); curr_effect->set_texture("LastPass", rt->cache_texture); @@ -1251,7 +1380,7 @@ int shaders::post_pass(d3d_render_target *rt, int source_index, poly_info *poly, auto win = d3d->assert_window(); screen_device_enumerator screen_iterator(machine->root_device()); - screen_device *screen = screen_iterator.byindex(curr_screen); + screen_device *screen = screen_iterator.byindex(target_to_screen[curr_target]); render_container &screen_container = screen->container(); float xscale = 1.0f / screen_container.xscale(); @@ -1270,7 +1399,7 @@ int shaders::post_pass(d3d_render_target *rt, int source_index, poly_info *poly, float(back_color_rgb.g()) / 255.0f, float(back_color_rgb.b()) / 255.0f }; - curr_effect = post_effect; + set_curr_effect(post_effect); curr_effect->update_uniforms(); curr_effect->set_texture("ShadowTexture", shadow_texture == nullptr ? nullptr : shadow_texture->get_finaltex()); curr_effect->set_int("ShadowTileMode", options->shadow_mask_tile_mode); @@ -1292,7 +1421,7 @@ int shaders::chroma_pass(d3d_render_target *rt, int source_index, poly_info *pol { int next_index = source_index; - curr_effect = chroma_effect; + set_curr_effect(chroma_effect); curr_effect->update_uniforms(); curr_effect->set_texture("Diffuse", rt->target_texture[next_index]); next_index = rt->next_index(next_index); @@ -1310,7 +1439,7 @@ int shaders::downsample_pass(d3d_render_target *rt, int source_index, poly_info return next_index; } - curr_effect = downsample_effect; + set_curr_effect(downsample_effect); curr_effect->update_uniforms(); for (int bloom_index = 0; bloom_index < rt->bloom_count; bloom_index++) @@ -1337,7 +1466,7 @@ int shaders::bloom_pass(d3d_render_target *rt, int source_index, poly_info *poly return next_index; } - curr_effect = bloom_effect; + set_curr_effect(bloom_effect); curr_effect->update_uniforms(); curr_effect->set_float("Level0Weight", options->bloom_level0_weight); @@ -1390,7 +1519,7 @@ int shaders::distortion_pass(d3d_render_target *rt, int source_index, poly_info return next_index; } - curr_effect = distortion_effect; + set_curr_effect(distortion_effect); curr_effect->update_uniforms(); curr_effect->set_texture("DiffuseTexture", rt->target_texture[next_index]); @@ -1404,7 +1533,7 @@ int shaders::vector_pass(d3d_render_target *rt, int source_index, poly_info *pol { int next_index = source_index; - curr_effect = vector_effect; + set_curr_effect(vector_effect); curr_effect->update_uniforms(); curr_effect->set_float("LengthRatio", options->vector_length_ratio); curr_effect->set_float("LengthScale", options->vector_length_scale); @@ -1420,14 +1549,13 @@ int shaders::vector_buffer_pass(d3d_render_target *rt, int source_index, poly_in { int next_index = source_index; - curr_effect = default_effect; + set_curr_effect(vector_buffer_effect); + curr_effect->set_texture("Diffuse", diffuse_texture->get_finaltex()); curr_effect->update_uniforms(); - curr_effect->set_technique("VectorBufferTechnique"); curr_effect->set_texture("Diffuse", rt->target_texture[next_index]); curr_effect->set_texture("LutTexture", lut_texture == nullptr ? nullptr : lut_texture->get_finaltex()); - // we need to clear the vector render target here next_index = rt->next_index(next_index); blit(rt->target_surface[next_index], true, D3DPT_TRIANGLELIST, 0, 2); @@ -1441,9 +1569,9 @@ int shaders::screen_pass(d3d_render_target *rt, int source_index, poly_info *pol d3d->set_blendmode(PRIMFLAG_GET_BLENDMODE(poly->flags())); - curr_effect = default_effect; + set_curr_effect(default_effect); + curr_effect->set_texture("Diffuse", diffuse_texture->get_finaltex()); curr_effect->update_uniforms(); - curr_effect->set_technique("ScreenTechnique"); curr_effect->set_texture("Diffuse", rt->target_texture[next_index]); curr_effect->set_texture("LutTexture", lut_texture == nullptr ? nullptr : lut_texture->get_finaltex()); @@ -1474,9 +1602,9 @@ void shaders::ui_pass(poly_info *poly, int vertnum) { d3d->set_blendmode(PRIMFLAG_GET_BLENDMODE(poly->flags())); - curr_effect = default_effect; + set_curr_effect(PRIMFLAG_GET_TEXWRAP(poly->flags()) ? ui_wrap_effect : ui_effect); + curr_effect->set_texture("Diffuse", diffuse_texture->get_finaltex()); curr_effect->update_uniforms(); - curr_effect->set_technique("UiTechnique"); curr_effect->set_texture("LutTexture", lut_texture == nullptr ? nullptr : ui_lut_texture->get_finaltex()); @@ -1508,9 +1636,9 @@ void shaders::render_quad(poly_info *poly, int vertnum) return; } - curr_screen = curr_screen < num_screens ? curr_screen : 0; + curr_target = curr_target < num_targets ? curr_target : 0; - curr_render_target = find_render_target(curr_texture->get_width(), curr_texture->get_height(), curr_screen); + curr_render_target = find_render_target(curr_texture->get_width(), curr_texture->get_height(), curr_target); d3d_render_target *rt = curr_render_target; if (rt == nullptr) @@ -1551,11 +1679,11 @@ void shaders::render_quad(poly_info *poly, int vertnum) curr_texture->increment_frame_count(); curr_texture->mask_frame_count(options->yiq_phase_count); - curr_screen++; + curr_target++; } else if (PRIMFLAG_GET_VECTOR(poly->flags())) { - curr_screen = curr_screen < num_screens ? curr_screen : 0; + curr_target = curr_target < num_targets ? curr_target : 0; int source_width = int(poly->prim_width() + 0.5f); int source_height = int(poly->prim_height() + 0.5f); @@ -1563,7 +1691,7 @@ void shaders::render_quad(poly_info *poly, int vertnum) { std::swap(source_width, source_height); } - curr_render_target = find_render_target(source_width, source_height, curr_screen); + curr_render_target = find_render_target(source_width, source_height, curr_target); d3d_render_target *rt = curr_render_target; if (rt == nullptr) @@ -1582,11 +1710,11 @@ void shaders::render_quad(poly_info *poly, int vertnum) osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); } - curr_screen++; + curr_target++; } else if (PRIMFLAG_GET_VECTORBUF(poly->flags())) { - curr_screen = curr_screen < num_screens ? curr_screen : 0; + curr_target = curr_target < num_targets ? curr_target : 0; int source_width = int(poly->prim_width() + 0.5f); int source_height = int(poly->prim_height() + 0.5f); @@ -1594,7 +1722,7 @@ void shaders::render_quad(poly_info *poly, int vertnum) { std::swap(source_width, source_height); } - curr_render_target = find_render_target(source_width, source_height, curr_screen); + curr_render_target = find_render_target(source_width, source_height, curr_target); d3d_render_target *rt = curr_render_target; if (rt == nullptr) @@ -1629,7 +1757,7 @@ void shaders::render_quad(poly_info *poly, int vertnum) next_index = screen_pass(rt, next_index, poly, vertnum); d3d->set_wrap(PRIMFLAG_GET_TEXWRAP(curr_texture->get_flags()) ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP); - curr_screen++; + curr_target++; } else { @@ -1795,16 +1923,6 @@ bool shaders::add_render_target(renderer_d3d9* d3d, render_primitive *prim, int } -//============================================================ -// shaders::enumerate_screens -//============================================================ -void shaders::enumerate_screens() -{ - screen_device_enumerator iter(machine->root_device()); - num_screens = iter.count(); -} - - //============================================================ // shaders::create_texture_target //============================================================ @@ -1863,89 +1981,54 @@ void shaders::delete_resources() m_render_target_list.clear(); - if (downsample_effect != nullptr) - { - delete downsample_effect; - downsample_effect = nullptr; - } - if (bloom_effect != nullptr) - { - delete bloom_effect; - bloom_effect = nullptr; - } - if (vector_effect != nullptr) - { - delete vector_effect; - vector_effect = nullptr; - } - if (default_effect != nullptr) - { - delete default_effect; - default_effect = nullptr; - } - if (post_effect != nullptr) - { - delete post_effect; - post_effect = nullptr; - } - if (distortion_effect != nullptr) - { - delete distortion_effect; - distortion_effect = nullptr; - } - if (prescale_effect != nullptr) - { - delete prescale_effect; - prescale_effect = nullptr; - } - if (phosphor_effect != nullptr) - { - delete phosphor_effect; - phosphor_effect = nullptr; - } - if (focus_effect != nullptr) - { - delete focus_effect; - focus_effect = nullptr; - } - if (scanline_effect != nullptr) - { - delete scanline_effect; - scanline_effect = nullptr; - } - if (deconverge_effect != nullptr) - { - delete deconverge_effect; - deconverge_effect = nullptr; - } - if (color_effect != nullptr) - { - delete color_effect; - color_effect = nullptr; - } - if (ntsc_effect != nullptr) - { - delete ntsc_effect; - ntsc_effect = nullptr; - } - if (chroma_effect != nullptr) - { - delete chroma_effect; - chroma_effect = nullptr; - } + delete downsample_effect; + delete bloom_effect; + delete vector_effect; + delete default_effect; + delete ui_effect; + delete vector_buffer_effect; + delete post_effect; + delete distortion_effect; + delete prescale_effect; + delete prescale_point_effect; + delete phosphor_effect; + delete focus_effect; + delete scanline_effect; + delete deconverge_effect; + delete color_effect; + delete ntsc_effect; + delete chroma_effect; - if (backbuffer != nullptr) + downsample_effect = nullptr; + bloom_effect = nullptr; + vector_effect = nullptr; + default_effect = nullptr; + ui_effect = nullptr; + vector_buffer_effect = nullptr; + post_effect = nullptr; + distortion_effect = nullptr; + prescale_effect = nullptr; + prescale_point_effect = nullptr; + phosphor_effect = nullptr; + focus_effect = nullptr; + scanline_effect = nullptr; + deconverge_effect = nullptr; + color_effect = nullptr; + ntsc_effect = nullptr; + chroma_effect = nullptr; + + if (backbuffer) { backbuffer->Release(); backbuffer = nullptr; } - if (black_surface != nullptr) + if (black_surface) { black_surface->Release(); black_surface = nullptr; } - if (black_texture != nullptr) + if (black_texture) { black_texture->Release(); black_texture = nullptr; @@ -2684,12 +2767,14 @@ void uniform::update() //============================================================ effect::effect(shaders *shadersys, IDirect3DDevice9 *dev, const char *name, const char *path) + : m_effect(nullptr) + , m_shaders(shadersys) + , m_num_passes(0) + , m_valid(false) + , m_active(false) { LPD3DXBUFFER buffer_errors = nullptr; - m_shaders = shadersys; - m_valid = false; - char name_cstr[1024]; sprintf(name_cstr, "%s\\%s", path, name); auto effect_name = osd::text::to_tstring(name_cstr); @@ -2716,6 +2801,12 @@ effect::effect(shaders *shadersys, IDirect3DDevice9 *dev, const char *name, cons effect::~effect() { m_effect->Release(); + + m_vecs.clear(); + m_floats.clear(); + m_ints.clear(); + m_bools.clear(); + m_textures.clear(); } void effect::add_uniform(const char *name, uniform::uniform_type type, int id) @@ -2729,24 +2820,19 @@ void effect::update_uniforms() (*uniform).update(); } -void effect::begin(UINT *passes, DWORD flags) +void effect::begin(DWORD flags) { - m_effect->Begin(passes, flags); + m_active = true; + m_num_passes = 0; + m_effect->Begin(&m_num_passes, flags); + m_effect->BeginPass(0); } void effect::end() { - m_effect->End(); -} - -void effect::begin_pass(UINT pass) -{ - m_effect->BeginPass(pass); -} - -void effect::end_pass() -{ + m_active = false; m_effect->EndPass(); + m_effect->End(); } void effect::set_technique(const char *name) @@ -2756,48 +2842,97 @@ void effect::set_technique(const char *name) void effect::set_vector(D3DXHANDLE param, int count, float *vector) { - static D3DXVECTOR4 out_vector; - if (count > 0) + count = std::min(count, 4); + + auto iter = m_vecs.find(param); + if (iter != m_vecs.end()) { - out_vector.x = vector[0]; + D3DXVECTOR4 &data = iter->second; + if (!memcmp((float *)data, vector, sizeof(float) * count)) + { + return; + } + memcpy(data, vector, sizeof(float) * count); + m_effect->SetVector(param, &iter->second); } - if (count > 1) + else { - out_vector.y = vector[1]; + D3DXVECTOR4 vec; + memcpy((float *)vec, vector, sizeof(float) * count); + m_effect->SetVector(param, &vec); + m_vecs[param] = vec; } - if (count > 2) - { - out_vector.z = vector[2]; - } - if (count > 3) - { - out_vector.w = vector[3]; - } - m_effect->SetVector(param, &out_vector); } void effect::set_float(D3DXHANDLE param, float value) { + auto iter = m_floats.find(param); + if (iter != m_floats.end()) + { + if (iter->second == value) + { + return; + } + iter->second = value; + } + else + { + m_floats[param] = value; + } m_effect->SetFloat(param, value); } void effect::set_int(D3DXHANDLE param, int value) { + auto iter = m_ints.find(param); + if (iter != m_ints.end()) + { + if (iter->second == value) + { + return; + } + iter->second = value; + } + else + { + m_ints[param] = value; + } m_effect->SetInt(param, value); } void effect::set_bool(D3DXHANDLE param, bool value) { + auto iter = m_bools.find(param); + if (iter != m_bools.end()) + { + if (iter->second == value) + { + return; + } + iter->second = value; + } + else + { + m_bools[param] = value; + } m_effect->SetBool(param, value); } -void effect::set_matrix(D3DXHANDLE param, D3DXMATRIX *matrix) -{ - m_effect->SetMatrix(param, matrix); -} - void effect::set_texture(D3DXHANDLE param, IDirect3DTexture9 *tex) { + auto iter = m_textures.find(param); + if (iter != m_textures.end()) + { + if (iter->second == (void *)tex) + { + return; + } + iter->second = (void *)tex; + } + else + { + m_textures[param] = (void *)tex; + } m_effect->SetTexture(param, tex); } diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h index f72197cb7b1..aa990e3c30c 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.h +++ b/src/osd/modules/render/d3d/d3dhlsl.h @@ -9,11 +9,13 @@ #ifndef __WIN_D3DHLSL__ #define __WIN_D3DHLSL__ -#include #include "../frontend/mame/ui/menuitem.h" #include "../frontend/mame/ui/slider.h" #include "modules/lib/osdlib.h" +#include +#include + //============================================================ // TYPE DEFINITIONS //============================================================ @@ -133,11 +135,8 @@ public: effect(shaders *shadersys, IDirect3DDevice9 *dev, const char *name, const char *path); ~effect(); - void begin(UINT *passes, DWORD flags); - void begin_pass(UINT pass); - + void begin(DWORD flags); void end(); - void end_pass(); void set_technique(const char *name); @@ -145,7 +144,6 @@ public: void set_float(D3DXHANDLE param, float value); void set_int(D3DXHANDLE param, int value); void set_bool(D3DXHANDLE param, bool value); - void set_matrix(D3DXHANDLE param, D3DXMATRIX *matrix); void set_texture(D3DXHANDLE param, IDirect3DTexture9 *tex); void add_uniform(const char *name, uniform::uniform_type type, int id); @@ -154,16 +152,26 @@ public: D3DXHANDLE get_parameter(D3DXHANDLE param, const char *name); shaders* get_shaders() { return m_shaders; } + uint32_t num_passes() { return m_num_passes; } bool is_valid() { return m_valid; } + bool is_active() { return m_active; } private: std::vector> m_uniform_list; ID3DXEffect *m_effect; shaders *m_shaders; + uint32_t m_num_passes; + + std::map m_vecs; + std::map m_floats; + std::map m_ints; + std::map m_bools; + std::map m_textures; bool m_valid; + bool m_active; }; class d3d_render_target; @@ -305,6 +313,9 @@ public: bool enabled() { return post_fx_enable && d3dintf->post_fx_available; } void toggle() { post_fx_enable = initialized && !post_fx_enable; } + void begin_frame(render_primitive_list *primlist); + void end_frame(); + void begin_draw(); void end_draw(); @@ -323,6 +334,7 @@ public: void init_fsfx_quad(); void set_texture(texture_info *info); + void set_filter(bool filter_screens); void remove_render_target(int source_width, int source_height, uint32_t screen_index); void remove_render_target(d3d_render_target *rt); @@ -336,8 +348,8 @@ public: void *get_slider_option(int id, int index = 0); private: + void set_curr_effect(effect *curr_effect); void blit(IDirect3DSurface9 *dst, bool clear_dst, D3DPRIMITIVETYPE prim_type, uint32_t prim_index, uint32_t prim_count); - void enumerate_screens(); void render_snapshot(IDirect3DSurface9 *surface); // Time since last call, only updates once per render of all screens @@ -372,7 +384,10 @@ private: bool post_fx_enable; // overall enable flag bool oversampling_enable; // oversampling enable flag int num_screens; // number of emulated physical screens - int curr_screen; // current screen for render target operations + int num_targets; // number of emulated screen targets (can be different from above; cf. artwork and Laserdisc games) + int curr_target; // current target index for render target operations + int targets_per_screen[256]; // screen target count per screen device/container index; estimated maximum count for array size + int target_to_screen[256]; // lookup from target index to screen device/container index; estimated maximum count for array size double acc_t; // accumulated machine time double delta_t; // data for delta_time bitmap_argb32 shadow_bitmap; // shadow mask bitmap for post-processing shader @@ -403,7 +418,11 @@ private: IDirect3DSurface9 * backbuffer; // pointer to our device's backbuffer effect * curr_effect; // pointer to the currently active effect object effect * default_effect; // pointer to the primary-effect object + effect * ui_effect; // pointer to the UI-element effect object + effect * ui_wrap_effect; // pointer to the UI-element effect object with texture wrapping + effect * vector_buffer_effect; // pointer to the vector-buffering effect object effect * prescale_effect; // pointer to the prescale-effect object + effect * prescale_point_effect; // pointer to the prescale-effect object with point filtering effect * post_effect; // pointer to the post-effect object effect * distortion_effect; // pointer to the distortion-effect object effect * scanline_effect; @@ -417,6 +436,8 @@ private: effect * vector_effect; // pointer to the vector-effect object effect * chroma_effect; + texture_info * diffuse_texture; + bool filter_screens; texture_info * curr_texture; d3d_render_target * curr_render_target; poly_info * curr_poly; diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp index 11801fd800d..d42f4739d26 100644 --- a/src/osd/modules/render/drawbgfx.cpp +++ b/src/osd/modules/render/drawbgfx.cpp @@ -90,6 +90,7 @@ uint32_t renderer_bgfx::s_current_view = 0; bool renderer_bgfx::s_bgfx_library_initialized = false; uint32_t renderer_bgfx::s_width[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; uint32_t renderer_bgfx::s_height[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +uint32_t renderer_bgfx::s_max_texture_size = 16384; // Relatively safe default on modern GPUs //============================================================ // renderer_bgfx - constructor @@ -108,6 +109,8 @@ renderer_bgfx::renderer_bgfx(std::shared_ptr w) , m_chains(nullptr) , m_ortho_view(nullptr) , m_max_view(0) + , m_view_width(1) + , m_view_height(1) , m_avi_view(nullptr) , m_avi_writer(nullptr) , m_avi_target(nullptr) @@ -207,6 +210,9 @@ void renderer_bgfx::init_bgfx_library() bool bgfx_debug = m_options.bgfx_debug(); bgfx::setDebug(bgfx_debug ? BGFX_DEBUG_STATS : BGFX_DEBUG_TEXT); + const bgfx::Caps* caps = bgfx::getCaps(); + s_max_texture_size = caps->limits.maxTextureSize; + ScreenVertex::init(); imguiCreate(); @@ -297,8 +303,10 @@ int renderer_bgfx::create() { std::shared_ptr win = assert_window(); osd_dim wdim = win->get_size(); - s_width[win->index()] = wdim.width(); - s_height[win->index()] = wdim.height(); + const uint32_t width = wdim.width(); + const uint32_t height = wdim.height(); + s_width[win->index()] = width; + s_height[win->index()] = height; m_dimensions = wdim; if (s_bgfx_library_initialized) @@ -350,11 +358,12 @@ int renderer_bgfx::create() m_ortho_view->set_backbuffer(m_framebuffer); } - m_chains = new chain_manager(win->machine(), m_options, *m_textures, *m_targets, *m_effects, win->index(), *this); + const uint32_t max_prescale_size = std::min(2u * std::max(width, height), s_max_texture_size); + m_chains = new chain_manager(win->machine(), m_options, *m_textures, *m_targets, *m_effects, win->index(), *this, win->prescale(), max_prescale_size); m_sliders_dirty = true; uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT; - m_texture_cache = m_textures->create_texture("#cache", bgfx::TextureFormat::BGRA8, CACHE_SIZE, CACHE_SIZE, nullptr, flags); + m_texture_cache = m_textures->create_texture("#cache", bgfx::TextureFormat::BGRA8, CACHE_SIZE, 0, CACHE_SIZE, nullptr, flags); memset(m_white, 0xff, sizeof(uint32_t) * 16 * 16); m_texinfo.push_back(rectangle_packer::packable_rectangle(WHITE_HASH, PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32), 16, 16, 16, nullptr, m_white)); @@ -402,7 +411,7 @@ void renderer_bgfx::record() else { m_avi_writer->record(m_options.bgfx_avi_name()); - m_avi_target = m_targets->create_target("avibuffer", bgfx::TextureFormat::BGRA8, s_width[0], s_height[0], TARGET_STYLE_CUSTOM, false, true, 1, 0); + m_avi_target = m_targets->create_target("avibuffer", bgfx::TextureFormat::BGRA8, s_width[0], s_height[0], 1, 1, TARGET_STYLE_CUSTOM, false, true, 1, 0); m_avi_texture = bgfx::createTexture2D(s_width[0], s_height[0], false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_BLIT_DST | BGFX_TEXTURE_READ_BACK); if (m_avi_view == nullptr) @@ -491,15 +500,6 @@ void renderer_bgfx::put_packed_quad(render_primitive *prim, uint32_t hash, Scree float u[4] = { u0, u1, u0, u1 }; float v[4] = { v0, v0, v1, v1 }; - if (bgfx::getRendererType() == bgfx::RendererType::Direct3D9) - { - for (int i = 0; i < 4; i++) - { - u[i] += 0.5f / size; - v[i] += 0.5f / size; - } - } - if (PRIMFLAG_GET_TEXORIENT(prim->flags) & ORIENTATION_SWAP_XY) { std::swap(u[1], u[2]); @@ -540,7 +540,7 @@ void renderer_bgfx::vertex(ScreenVertex* vertex, float x, float y, float z, uint vertex->m_v = v; } -void renderer_bgfx::render_post_screen_quad(int view, render_primitive* prim, bgfx::TransientVertexBuffer* buffer, int32_t screen) +void renderer_bgfx::render_post_screen_quad(int view, render_primitive* prim, bgfx::TransientVertexBuffer* buffer, int32_t screen, int window_index) { auto* vertices = reinterpret_cast(buffer->data); @@ -565,6 +565,15 @@ void renderer_bgfx::render_post_screen_quad(int view, render_primitive* prim, bg uint32_t blend = PRIMFLAG_GET_BLENDMODE(prim->flags); bgfx::setVertexBuffer(0,buffer); bgfx::setTexture(0, m_screen_effect[blend]->uniform("s_tex")->handle(), m_targets->target(screen, "output")->texture(), texture_flags); + + bgfx_uniform* inv_view_dims = m_screen_effect[blend]->uniform("u_inv_view_dims"); + if (inv_view_dims) + { + float values[2] = { -1.0f / s_width[window_index], 1.0f / s_height[window_index] }; + inv_view_dims->set(values, sizeof(float) * 2); + inv_view_dims->upload(); + } + m_screen_effect[blend]->submit(m_ortho_view->get_index()); } @@ -574,7 +583,7 @@ void renderer_bgfx::render_avi_quad() m_avi_view->setup(); bgfx::setViewRect(s_current_view, 0, 0, s_width[0], s_height[0]); - bgfx::setViewClear(s_current_view, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x00000000, 1.0f, 0); + bgfx::setViewClear(s_current_view, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x000000ff, 1.0f, 0); bgfx::TransientVertexBuffer buffer; bgfx::allocTransientVertexBuffer(&buffer, 6, ScreenVertex::ms_decl); @@ -595,11 +604,21 @@ void renderer_bgfx::render_avi_quad() bgfx::setVertexBuffer(0,&buffer); bgfx::setTexture(0, m_gui_effect[PRIMFLAG_GET_BLENDMODE(BLENDMODE_NONE)]->uniform("s_tex")->handle(), m_avi_target->texture()); - m_gui_effect[PRIMFLAG_GET_BLENDMODE(BLENDMODE_NONE)]->submit(s_current_view); + + bgfx_effect* effect = m_gui_effect[PRIMFLAG_GET_BLENDMODE(BLENDMODE_NONE)]; + bgfx_uniform* inv_view_dims = effect->uniform("u_inv_view_dims"); + if (inv_view_dims) + { + float values[2] = { -1.0f / s_width[0], 1.0f / s_height[0] }; + inv_view_dims->set(values, sizeof(float) * 2); + inv_view_dims->upload(); + } + + effect->submit(s_current_view); s_current_view++; } -void renderer_bgfx::render_textured_quad(render_primitive* prim, bgfx::TransientVertexBuffer* buffer) +void renderer_bgfx::render_textured_quad(render_primitive* prim, bgfx::TransientVertexBuffer* buffer, int window_index) { auto* vertices = reinterpret_cast(buffer->data); uint32_t rgba = u32Color(prim->color.r * 255, prim->color.g * 255, prim->color.b * 255, prim->color.a * 255); @@ -636,7 +655,7 @@ void renderer_bgfx::render_textured_quad(render_primitive* prim, bgfx::Transient else { texture = m_textures->create_or_update_mame_texture(prim->flags & PRIMFLAG_TEXFORMAT_MASK - , tex_width, tex_height, prim->texture.rowpixels, prim->texture.palette, prim->texture.base, prim->texture.seqid + , tex_width, prim->texture.width_margin, tex_height, prim->texture.rowpixels, prim->texture.palette, prim->texture.base, prim->texture.seqid , texture_flags, prim->texture.unique_id, prim->texture.old_id); } @@ -645,6 +664,15 @@ void renderer_bgfx::render_textured_quad(render_primitive* prim, bgfx::Transient uint32_t blend = PRIMFLAG_GET_BLENDMODE(prim->flags); bgfx::setVertexBuffer(0,buffer); bgfx::setTexture(0, effects[blend]->uniform("s_tex")->handle(), texture); + + bgfx_uniform* inv_view_dims = effects[blend]->uniform("u_inv_view_dims"); + if (inv_view_dims) + { + float values[2] = { -1.0f / s_width[window_index], 1.0f / s_height[window_index] }; + inv_view_dims->set(values, sizeof(float) * 2); + inv_view_dims->upload(); + } + effects[blend]->submit(m_ortho_view->get_index()); if (is_screen) @@ -950,12 +978,21 @@ int renderer_bgfx::draw(int update) } } - buffer_status status = buffer_primitives(atlas_valid, &prim, &buffer, screen); + buffer_status status = buffer_primitives(atlas_valid, &prim, &buffer, screen, window_index); if (status != BUFFER_EMPTY && status != BUFFER_SCREEN) { - bgfx::setVertexBuffer(0,&buffer); + bgfx::setVertexBuffer(0, &buffer); bgfx::setTexture(0, m_gui_effect[blend]->uniform("s_tex")->handle(), m_texture_cache->texture()); + + bgfx_uniform* inv_view_dims = m_gui_effect[blend]->uniform("u_inv_view_dims"); + if (inv_view_dims) + { + float values[2] = { -1.0f / s_width[window_index], 1.0f / s_height[window_index] }; + inv_view_dims->set(values, sizeof(float) * 2); + inv_view_dims->upload(); + } + m_gui_effect[blend]->submit(m_ortho_view->get_index()); } @@ -1050,7 +1087,7 @@ bool renderer_bgfx::update_dimensions() bgfx::setViewFrameBuffer(s_current_view, m_framebuffer->target()); } - bgfx::setViewClear(s_current_view, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x00000000, 1.0f, 0); + bgfx::setViewClear(s_current_view, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x000000ff, 1.0f, 0); bgfx::setViewMode(s_current_view, bgfx::ViewMode::Sequential); bgfx::touch(s_current_view); bgfx::frame(); @@ -1098,7 +1135,7 @@ render_primitive_list *renderer_bgfx::get_primitives() return &win->target()->get_primitives(); } -renderer_bgfx::buffer_status renderer_bgfx::buffer_primitives(bool atlas_valid, render_primitive** prim, bgfx::TransientVertexBuffer* buffer, int32_t screen) +renderer_bgfx::buffer_status renderer_bgfx::buffer_primitives(bool atlas_valid, render_primitive** prim, bgfx::TransientVertexBuffer* buffer, int32_t screen, int window_index) { int vertices = 0; @@ -1140,18 +1177,18 @@ renderer_bgfx::buffer_status renderer_bgfx::buffer_primitives(bool atlas_valid, { #if SCENE_VIEW setup_view(s_current_view, true); - render_post_screen_quad(s_current_view, *prim, buffer, screen); + render_post_screen_quad(s_current_view, *prim, buffer, screen, window_index); s_current_view++; #else setup_ortho_view(); - render_post_screen_quad(m_ortho_view->get_index(), *prim, buffer, screen); + render_post_screen_quad(m_ortho_view->get_index(), *prim, buffer, screen, window_index); #endif return BUFFER_SCREEN; } else { setup_ortho_view(); - render_textured_quad(*prim, buffer); + render_textured_quad(*prim, buffer, window_index); return BUFFER_EMPTY; } } @@ -1232,7 +1269,7 @@ void renderer_bgfx::process_atlas_packs(std::vectortexture(), 0, 0, rect.x(), rect.y(), (rect.width() * width_mul_factor) / width_div_factor, rect.height(), mem, pitch); } } @@ -1285,8 +1322,7 @@ bool renderer_bgfx::check_for_dirty_atlas() atlas_dirty = true; m_texinfo.push_back(rectangle_packer::packable_rectangle(hash, prim.flags & PRIMFLAG_TEXFORMAT_MASK, - prim.texture.width, prim.texture.height, - prim.texture.rowpixels, prim.texture.palette, prim.texture.base)); + prim.texture.width, prim.texture.height, prim.texture.rowpixels, prim.texture.palette, prim.texture.base)); acquired_infos[hash] = m_texinfo[m_texinfo.size() - 1]; } } diff --git a/src/osd/modules/render/drawbgfx.h b/src/osd/modules/render/drawbgfx.h index bdc3e894ebd..15b0d6e158b 100644 --- a/src/osd/modules/render/drawbgfx.h +++ b/src/osd/modules/render/drawbgfx.h @@ -84,10 +84,10 @@ private: void setup_ortho_view(); void allocate_buffer(render_primitive *prim, uint32_t blend, bgfx::TransientVertexBuffer *buffer); - buffer_status buffer_primitives(bool atlas_valid, render_primitive** prim, bgfx::TransientVertexBuffer* buffer, int32_t screen); + buffer_status buffer_primitives(bool atlas_valid, render_primitive** prim, bgfx::TransientVertexBuffer* buffer, int32_t screen, int window_index); - void render_textured_quad(render_primitive* prim, bgfx::TransientVertexBuffer* buffer); - void render_post_screen_quad(int view, render_primitive* prim, bgfx::TransientVertexBuffer* buffer, int32_t screen); + void render_textured_quad(render_primitive* prim, bgfx::TransientVertexBuffer* buffer, int window_index); + void render_post_screen_quad(int view, render_primitive* prim, bgfx::TransientVertexBuffer* buffer, int32_t screen, int window_index); void put_packed_quad(render_primitive *prim, uint32_t hash, ScreenVertex* vertex); void put_packed_line(render_primitive *prim, ScreenVertex* vertex); @@ -132,6 +132,8 @@ private: uint32_t m_white[16*16]; bgfx_view *m_ortho_view; uint32_t m_max_view; + uint16_t m_view_width; + uint16_t m_view_height; bgfx_view *m_avi_view; avi_write *m_avi_writer; @@ -149,6 +151,7 @@ private: static bool s_bgfx_library_initialized; static uint32_t s_width[16]; static uint32_t s_height[16]; + static uint32_t s_max_texture_size; }; #endif // MAME_RENDER_DRAWBGFX_H diff --git a/src/osd/modules/render/drawd3d.cpp b/src/osd/modules/render/drawd3d.cpp index c594e330e10..f9f03d9efc0 100644 --- a/src/osd/modules/render/drawd3d.cpp +++ b/src/osd/modules/render/drawd3d.cpp @@ -242,7 +242,12 @@ int renderer_d3d9::draw(const int update) return check; begin_frame(); + + // reset blend mode + set_blendmode(BLENDMODE_NONE); + process_primitives(); + end_frame(); return 0; @@ -254,8 +259,12 @@ void renderer_d3d9::set_texture(texture_info *texture) { m_last_texture = texture; m_last_texture_flags = (texture == nullptr ? 0 : texture->get_flags()); + if (m_shaders->enabled()) + { + m_shaders->set_texture(texture); + } + HRESULT result = m_device->SetTexture(0, (texture == nullptr) ? get_default_texture()->get_finaltex() : texture->get_finaltex()); - m_shaders->set_texture(texture); if (FAILED(result)) osd_printf_verbose("Direct3D: Error %08lX during device set_texture call\n", result); } @@ -353,15 +362,20 @@ void renderer_d3d9::set_blendmode(int blendmode) } // adjust the bits that changed + bool new_blend_enable = false; if (blendenable != m_last_blendenable) { m_last_blendenable = blendenable; + if (blendenable) + { + new_blend_enable = true; + } HRESULT result = m_device->SetRenderState(D3DRS_ALPHABLENDENABLE, blendenable); if (FAILED(result)) osd_printf_verbose("Direct3D: Error %08lX during device SetRenderState call\n", result); } - if (blendop != m_last_blendop) + if (blendop != m_last_blendop || new_blend_enable) { m_last_blendop = blendop; HRESULT result = m_device->SetRenderState(D3DRS_BLENDOP, blendop); @@ -369,7 +383,7 @@ void renderer_d3d9::set_blendmode(int blendmode) osd_printf_verbose("Direct3D: Error %08lX during device SetRenderState call\n", result); } - if (blendsrc != m_last_blendsrc) + if (blendsrc != m_last_blendsrc || new_blend_enable) { m_last_blendsrc = blendsrc; HRESULT result = m_device->SetRenderState(D3DRS_SRCBLEND, blendsrc); @@ -377,7 +391,7 @@ void renderer_d3d9::set_blendmode(int blendmode) osd_printf_verbose("Direct3D: Error %08lX during device SetRenderState call\n", result); } - if (blenddst != m_last_blenddst) + if (blenddst != m_last_blenddst || new_blend_enable) { m_last_blenddst = blenddst; HRESULT result = m_device->SetRenderState(D3DRS_DESTBLEND, blenddst); @@ -652,7 +666,7 @@ void renderer_d3d9::begin_frame() { auto win = assert_window(); - HRESULT result = m_device->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0); + HRESULT result = m_device->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0xff,0,0,0), 0, 0); if (FAILED(result)) osd_printf_verbose("Direct3D: Error %08lX during device clear call\n", result); @@ -667,7 +681,7 @@ void renderer_d3d9::begin_frame() osd_printf_verbose("Direct3D: Error %08lX during device BeginScene call\n", result); if (m_shaders->enabled()) - m_shaders->init_fsfx_quad(); + m_shaders->begin_frame(win->m_primlist); } void renderer_d3d9::process_primitives() @@ -723,6 +737,9 @@ void renderer_d3d9::end_frame() // flush any pending polygons primitive_flush_pending(); + if (m_shaders->enabled()) + m_shaders->end_frame(); + // finish the scene HRESULT result = m_device->EndScene(); if (FAILED(result)) @@ -1412,6 +1429,7 @@ void renderer_d3d9::batch_vectors(int vector_count) int triangle_count = vector_count * 2; m_vectorbatch = mesh_alloc(vertex_count); m_batchindex = 0; + uint32_t tint = 0xffffffff; uint32_t cached_flags = 0; for (render_primitive &prim : *win->m_primlist) @@ -1423,6 +1441,12 @@ void renderer_d3d9::batch_vectors(int vector_count) { batch_vector(prim); cached_flags = prim.flags; + + const uint8_t a = (uint8_t)std::round(prim.color.a * 255); + const uint8_t r = (uint8_t)std::round(prim.color.r * 255); + const uint8_t g = (uint8_t)std::round(prim.color.g * 255); + const uint8_t b = (uint8_t)std::round(prim.color.b * 255); + tint = (a << 24) | (b << 16) | (g << 8) | r; } break; @@ -1433,6 +1457,12 @@ void renderer_d3d9::batch_vectors(int vector_count) quad_height = prim.get_quad_height(); target_width = prim.get_full_quad_width(); target_height = prim.get_full_quad_height(); + + const uint8_t a = (uint8_t)std::round(prim.color.a * 255); + const uint8_t r = (uint8_t)std::round(prim.color.r * 255); + const uint8_t g = (uint8_t)std::round(prim.color.g * 255); + const uint8_t b = (uint8_t)std::round(prim.color.b * 255); + tint = (a << 24) | (b << 16) | (g << 8) | r; } break; @@ -1510,7 +1540,7 @@ void renderer_d3d9::batch_vectors(int vector_count) } // now add a polygon entry - m_poly[m_numpolys].init(D3DPT_TRIANGLELIST, triangle_count, vertex_count, cached_flags, nullptr, D3DTOP_MODULATE, quad_width, quad_height); + m_poly[m_numpolys].init(D3DPT_TRIANGLELIST, triangle_count, vertex_count, cached_flags, nullptr, D3DTOP_MODULATE, quad_width, quad_height, tint); m_numpolys++; } @@ -1652,10 +1682,10 @@ void renderer_d3d9::draw_line(const render_primitive &prim) vertex[3].v0 = stop.c.y; // determine the color of the line - auto r = (int32_t)(prim.color.r * 255.0f); - auto g = (int32_t)(prim.color.g * 255.0f); - auto b = (int32_t)(prim.color.b * 255.0f); - auto a = (int32_t)(prim.color.a * 255.0f); + auto r = (int32_t)std::round(prim.color.r * 255.0f); + auto g = (int32_t)std::round(prim.color.g * 255.0f); + auto b = (int32_t)std::round(prim.color.b * 255.0f); + auto a = (int32_t)std::round(prim.color.a * 255.0f); DWORD color = D3DCOLOR_ARGB(a, r, g, b); // set the color, Z parameters to standard values @@ -1667,7 +1697,7 @@ void renderer_d3d9::draw_line(const render_primitive &prim) } // now add a polygon entry - m_poly[m_numpolys].init(D3DPT_TRIANGLESTRIP, 2, 4, prim.flags, nullptr, D3DTOP_MODULATE, 0.0f, 0.0f); + m_poly[m_numpolys].init(D3DPT_TRIANGLESTRIP, 2, 4, prim.flags, nullptr, D3DTOP_MODULATE, 0.0f, 0.0f, (uint32_t)color); m_numpolys++; } @@ -1721,10 +1751,10 @@ void renderer_d3d9::draw_quad(const render_primitive &prim) } // determine the color, allowing for over modulation - auto r = (int32_t)(prim.color.r * 255.0f); - auto g = (int32_t)(prim.color.g * 255.0f); - auto b = (int32_t)(prim.color.b * 255.0f); - auto a = (int32_t)(prim.color.a * 255.0f); + auto r = (int32_t)std::round(prim.color.r * 255.0f); + auto g = (int32_t)std::round(prim.color.g * 255.0f); + auto b = (int32_t)std::round(prim.color.b * 255.0f); + auto a = (int32_t)std::round(prim.color.a * 255.0f); DWORD color = D3DCOLOR_ARGB(a, r, g, b); // adjust half pixel X/Y offset, set the color, Z parameters to standard values @@ -1738,7 +1768,7 @@ void renderer_d3d9::draw_quad(const render_primitive &prim) } // now add a polygon entry - m_poly[m_numpolys].init(D3DPT_TRIANGLESTRIP, 2, 4, prim.flags, texture, D3DTOP_MODULATE, quad_width, quad_height); + m_poly[m_numpolys].init(D3DPT_TRIANGLESTRIP, 2, 4, prim.flags, texture, D3DTOP_MODULATE, quad_width, quad_height, (uint32_t)color); m_numpolys++; } @@ -1826,9 +1856,17 @@ void renderer_d3d9::primitive_flush_pending() newfilter = FALSE; if (PRIMFLAG_GET_SCREENTEX(flags)) newfilter = video_config.filter; - set_filter(newfilter); - set_wrap(PRIMFLAG_GET_TEXWRAP(flags) ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP); - set_modmode(m_poly[polynum].modmode()); + + if (m_shaders->enabled()) + { + m_shaders->set_filter(newfilter); + } + else + { + set_filter(newfilter); + set_wrap(PRIMFLAG_GET_TEXWRAP(flags) ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP); + set_modmode(m_poly[polynum].modmode()); + } } if (vertnum + m_poly[polynum].numverts() > m_numverts) @@ -1841,9 +1879,6 @@ void renderer_d3d9::primitive_flush_pending() if(m_shaders->enabled()) { - // reset blend mode (handled by shader passes) - set_blendmode(BLENDMODE_NONE); - m_shaders->render_quad(&m_poly[polynum], vertnum); } else