From b212e5dc2ef472f3ac449377fd00c6b7b824de85 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Tue, 15 Mar 2016 05:17:38 +0100 Subject: [PATCH] Add most of the rest of the D3D HLSL chain, nw --- bgfx/chains/hlsl.json | 174 ++++++++++++- bgfx/effects/bloom_scale.json | 23 ++ bgfx/effects/defocus.json | 26 ++ bgfx/effects/distortion.json | 29 +++ bgfx/effects/ntsc_decode.json | 3 +- bgfx/effects/ntsc_encode.json | 3 +- bgfx/effects/post.json | 49 ++++ bgfx/shaders/dx11/fs_blit.bin | Bin 38808 -> 40856 bytes bgfx/shaders/dx11/fs_color.bin | Bin 41211 -> 43259 bytes bgfx/shaders/dx11/fs_deconverge.bin | Bin 41062 -> 41062 bytes bgfx/shaders/dx11/fs_defocus.bin | Bin 0 -> 47854 bytes bgfx/shaders/dx11/fs_distortion.bin | Bin 0 -> 56047 bytes bgfx/shaders/dx11/fs_gui.bin | Bin 38808 -> 40856 bytes bgfx/shaders/dx11/fs_ntsc_decode.bin | Bin 59140 -> 58921 bytes bgfx/shaders/dx11/fs_ntsc_encode.bin | Bin 48340 -> 48189 bytes bgfx/shaders/dx11/fs_phosphor.bin | Bin 41138 -> 41094 bytes bgfx/shaders/dx11/fs_post.bin | Bin 0 -> 57905 bytes bgfx/shaders/dx11/fs_ratios.bin | Bin 41118 -> 41118 bytes bgfx/shaders/dx11/fs_screen.bin | Bin 38808 -> 40856 bytes bgfx/shaders/dx11/fs_tint.bin | Bin 38963 -> 41011 bytes bgfx/shaders/dx11/vs_blit.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_color.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_deconverge.bin | Bin 43858 -> 43891 bytes bgfx/shaders/dx11/vs_defocus.bin | Bin 0 -> 38987 bytes bgfx/shaders/dx11/vs_distortion.bin | Bin 0 -> 38987 bytes bgfx/shaders/dx11/vs_gui.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_ntsc_decode.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_ntsc_encode.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_phosphor.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_post.bin | Bin 0 -> 41216 bytes bgfx/shaders/dx11/vs_ratios.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_screen.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx11/vs_tint.bin | Bin 38987 -> 38987 bytes bgfx/shaders/dx9/fs_blit.bin | Bin 605 -> 605 bytes bgfx/shaders/dx9/fs_color.bin | Bin 1483 -> 1483 bytes bgfx/shaders/dx9/fs_deconverge.bin | Bin 1026 -> 1026 bytes bgfx/shaders/dx9/fs_defocus.bin | Bin 0 -> 1822 bytes bgfx/shaders/dx9/fs_distortion.bin | Bin 0 -> 4891 bytes bgfx/shaders/dx9/fs_gui.bin | Bin 645 -> 645 bytes bgfx/shaders/dx9/fs_ntsc_decode.bin | Bin 7756 -> 7473 bytes bgfx/shaders/dx9/fs_ntsc_encode.bin | Bin 3552 -> 3249 bytes bgfx/shaders/dx9/fs_phosphor.bin | Bin 1103 -> 975 bytes bgfx/shaders/dx9/fs_post.bin | Bin 0 -> 5172 bytes bgfx/shaders/dx9/fs_ratios.bin | Bin 1171 -> 1171 bytes bgfx/shaders/dx9/fs_screen.bin | Bin 605 -> 605 bytes bgfx/shaders/dx9/fs_tint.bin | Bin 896 -> 896 bytes bgfx/shaders/dx9/vs_blit.bin | Bin 886 -> 886 bytes bgfx/shaders/dx9/vs_color.bin | Bin 886 -> 886 bytes bgfx/shaders/dx9/vs_deconverge.bin | Bin 2037 -> 2010 bytes bgfx/shaders/dx9/vs_defocus.bin | Bin 0 -> 890 bytes bgfx/shaders/dx9/vs_distortion.bin | Bin 0 -> 890 bytes bgfx/shaders/dx9/vs_gui.bin | Bin 886 -> 886 bytes bgfx/shaders/dx9/vs_ntsc_decode.bin | Bin 894 -> 894 bytes bgfx/shaders/dx9/vs_ntsc_encode.bin | Bin 894 -> 894 bytes bgfx/shaders/dx9/vs_phosphor.bin | Bin 890 -> 890 bytes bgfx/shaders/dx9/vs_post.bin | Bin 0 -> 1163 bytes bgfx/shaders/dx9/vs_ratios.bin | Bin 886 -> 886 bytes bgfx/shaders/dx9/vs_screen.bin | Bin 886 -> 886 bytes bgfx/shaders/dx9/vs_tint.bin | Bin 886 -> 886 bytes bgfx/shaders/gles/fs_defocus.bin | Bin 0 -> 1156 bytes bgfx/shaders/gles/fs_distortion.bin | Bin 0 -> 3931 bytes bgfx/shaders/gles/fs_ntsc_decode.bin | Bin 7008 -> 6676 bytes bgfx/shaders/gles/fs_ntsc_encode.bin | Bin 3162 -> 3035 bytes bgfx/shaders/gles/fs_phosphor.bin | Bin 599 -> 651 bytes bgfx/shaders/gles/fs_post.bin | Bin 0 -> 4396 bytes bgfx/shaders/gles/vs_deconverge.bin | Bin 1565 -> 1608 bytes bgfx/shaders/gles/vs_defocus.bin | Bin 0 -> 419 bytes bgfx/shaders/gles/vs_distortion.bin | Bin 0 -> 419 bytes bgfx/shaders/gles/vs_post.bin | Bin 0 -> 750 bytes bgfx/shaders/glsl/fs_defocus.bin | Bin 0 -> 1121 bytes bgfx/shaders/glsl/fs_distortion.bin | Bin 0 -> 3752 bytes bgfx/shaders/glsl/fs_ntsc_decode.bin | Bin 6620 -> 6318 bytes bgfx/shaders/glsl/fs_ntsc_encode.bin | Bin 3002 -> 2881 bytes bgfx/shaders/glsl/fs_phosphor.bin | Bin 520 -> 613 bytes bgfx/shaders/glsl/fs_post.bin | Bin 0 -> 4166 bytes bgfx/shaders/glsl/vs_deconverge.bin | Bin 1451 -> 1488 bytes bgfx/shaders/glsl/vs_defocus.bin | Bin 0 -> 377 bytes bgfx/shaders/glsl/vs_distortion.bin | Bin 0 -> 377 bytes bgfx/shaders/glsl/vs_post.bin | Bin 0 -> 684 bytes bgfx/shaders/metal/fs_defocus.bin | Bin 0 -> 2475 bytes bgfx/shaders/metal/fs_distortion.bin | Bin 0 -> 4349 bytes bgfx/shaders/metal/fs_ntsc_decode.bin | Bin 7457 -> 7152 bytes bgfx/shaders/metal/fs_ntsc_encode.bin | Bin 3700 -> 3577 bytes bgfx/shaders/metal/fs_phosphor.bin | Bin 1066 -> 1116 bytes bgfx/shaders/metal/fs_post.bin | Bin 0 -> 4828 bytes bgfx/shaders/metal/vs_deconverge.bin | Bin 1709 -> 1733 bytes bgfx/shaders/metal/vs_defocus.bin | Bin 0 -> 757 bytes bgfx/shaders/metal/vs_distortion.bin | Bin 0 -> 757 bytes bgfx/shaders/metal/vs_post.bin | Bin 0 -> 1048 bytes scripts/src/osd/modules.lua | 1 + src/osd/modules/lib/osdobj_common.cpp | 7 +- src/osd/modules/lib/osdobj_common.h | 2 + src/osd/modules/osdwindow.h | 1 + src/osd/modules/render/bgfx/chain.cpp | 28 +- src/osd/modules/render/bgfx/chain.h | 1 + src/osd/modules/render/bgfx/chainentry.cpp | 29 ++- .../modules/render/bgfx/chainentryreader.cpp | 19 +- .../modules/render/bgfx/chainentryreader.h | 3 +- src/osd/modules/render/bgfx/chainmanager.cpp | 2 +- src/osd/modules/render/bgfx/chainreader.cpp | 6 +- src/osd/modules/render/bgfx/chainreader.h | 2 +- .../modules/render/bgfx/frameparameter.cpp | 3 +- src/osd/modules/render/bgfx/frameparameter.h | 3 +- src/osd/modules/render/bgfx/fs_defocus.sc | 52 ++++ src/osd/modules/render/bgfx/fs_distortion.sc | 239 ++++++++++++++++++ src/osd/modules/render/bgfx/fs_ntsc_decode.sc | 20 +- src/osd/modules/render/bgfx/fs_ntsc_encode.sc | 14 +- src/osd/modules/render/bgfx/fs_phosphor.sc | 10 +- src/osd/modules/render/bgfx/fs_post.sc | 156 ++++++++++++ src/osd/modules/render/bgfx/inputpair.cpp | 10 +- src/osd/modules/render/bgfx/inputpair.h | 2 +- src/osd/modules/render/bgfx/parameter.h | 5 +- src/osd/modules/render/bgfx/paramreader.cpp | 29 ++- src/osd/modules/render/bgfx/paramreader.h | 2 +- src/osd/modules/render/bgfx/sliderreader.cpp | 17 +- src/osd/modules/render/bgfx/sliderreader.h | 2 +- src/osd/modules/render/bgfx/timeparameter.cpp | 33 +++ src/osd/modules/render/bgfx/timeparameter.h | 34 +++ src/osd/modules/render/bgfx/vs_deconverge.sc | 8 +- src/osd/modules/render/bgfx/vs_defocus.sc | 14 + src/osd/modules/render/bgfx/vs_distortion.sc | 14 + src/osd/modules/render/bgfx/vs_post.sc | 19 ++ src/osd/modules/render/bgfx/windowparameter.h | 2 +- src/osd/modules/render/d3d/d3dhlsl.cpp | 9 +- src/osd/modules/render/drawbgfx.cpp | 1 + src/osd/modules/render/drawbgfx.h | 7 +- src/osd/windows/window.cpp | 16 +- src/osd/windows/winmain.h | 2 + 128 files changed, 1021 insertions(+), 110 deletions(-) create mode 100644 bgfx/effects/bloom_scale.json create mode 100644 bgfx/effects/defocus.json create mode 100644 bgfx/effects/distortion.json create mode 100644 bgfx/effects/post.json create mode 100644 bgfx/shaders/dx11/fs_defocus.bin create mode 100644 bgfx/shaders/dx11/fs_distortion.bin create mode 100644 bgfx/shaders/dx11/fs_post.bin create mode 100644 bgfx/shaders/dx11/vs_defocus.bin create mode 100644 bgfx/shaders/dx11/vs_distortion.bin create mode 100644 bgfx/shaders/dx11/vs_post.bin create mode 100644 bgfx/shaders/dx9/fs_defocus.bin create mode 100644 bgfx/shaders/dx9/fs_distortion.bin create mode 100644 bgfx/shaders/dx9/fs_post.bin create mode 100644 bgfx/shaders/dx9/vs_defocus.bin create mode 100644 bgfx/shaders/dx9/vs_distortion.bin create mode 100644 bgfx/shaders/dx9/vs_post.bin create mode 100644 bgfx/shaders/gles/fs_defocus.bin create mode 100644 bgfx/shaders/gles/fs_distortion.bin create mode 100644 bgfx/shaders/gles/fs_post.bin create mode 100644 bgfx/shaders/gles/vs_defocus.bin create mode 100644 bgfx/shaders/gles/vs_distortion.bin create mode 100644 bgfx/shaders/gles/vs_post.bin create mode 100644 bgfx/shaders/glsl/fs_defocus.bin create mode 100644 bgfx/shaders/glsl/fs_distortion.bin create mode 100644 bgfx/shaders/glsl/fs_post.bin create mode 100644 bgfx/shaders/glsl/vs_defocus.bin create mode 100644 bgfx/shaders/glsl/vs_distortion.bin create mode 100644 bgfx/shaders/glsl/vs_post.bin create mode 100644 bgfx/shaders/metal/fs_defocus.bin create mode 100644 bgfx/shaders/metal/fs_distortion.bin create mode 100644 bgfx/shaders/metal/fs_post.bin create mode 100644 bgfx/shaders/metal/vs_defocus.bin create mode 100644 bgfx/shaders/metal/vs_distortion.bin create mode 100644 bgfx/shaders/metal/vs_post.bin create mode 100644 src/osd/modules/render/bgfx/fs_defocus.sc create mode 100644 src/osd/modules/render/bgfx/fs_distortion.sc create mode 100644 src/osd/modules/render/bgfx/fs_post.sc create mode 100644 src/osd/modules/render/bgfx/timeparameter.cpp create mode 100644 src/osd/modules/render/bgfx/timeparameter.h create mode 100644 src/osd/modules/render/bgfx/vs_defocus.sc create mode 100644 src/osd/modules/render/bgfx/vs_distortion.sc create mode 100644 src/osd/modules/render/bgfx/vs_post.sc diff --git a/bgfx/chains/hlsl.json b/bgfx/chains/hlsl.json index d9d85020bd5..6e7c82af52a 100644 --- a/bgfx/chains/hlsl.json +++ b/bgfx/chains/hlsl.json @@ -26,12 +26,40 @@ { "type": "vec2", "name": "converge_red", "text": "Red Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, { "type": "vec2", "name": "converge_green", "text": "Green Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, { "type": "vec2", "name": "converge_blue", "text": "Blue Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, - { "type": "vec2", "name": "radial_converge_red", "text": "Red Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, - { "type": "vec2", "name": "radial_converge_green", "text": "Green Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, - { "type": "vec2", "name": "radial_converge_blue", "text": "Blue Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" } + + { "type": "vec2", "name": "radial_converge_red", "text": "Red Radial Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, + { "type": "vec2", "name": "radial_converge_green", "text": "Green Radial Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, + { "type": "vec2", "name": "radial_converge_blue", "text": "Blue Radial Convergence, ", "default": [ 0, 0 ], "max": [ 8000, 6000 ], "min": [ -8000, -6000 ], "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" }, + + { "type": "vec2", "name": "defocus", "text": "Defocus, ", "default": [ 0, 0 ], "max": [ 500, 500 ], "min": [ 0, 0 ], "step": 1, "scale": 0.1, "format": "%2.1f", "screen": "crt" }, + + { "type": "color", "name": "phosphor", "text": "Phosphor Persistence, ", "default": [ 0, 0, 0 ], "max": [ 100, 100, 100 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + + { "type": "float", "name": "scanline_alpha", "text": "Scanline Amount", "default": 0, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "scanline_scale", "text": "Overall Scanline Scale", "default": 100, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "scanline_bright_scale", "text": "Scanline Brightness Scale", "default": 100, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "scanline_bright_offset", "text": "Scanline Brightness Offset", "default": 0, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "scanline_jitter_amount", "text": "Scanline Jitter Amount", "default": 0, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "scanline_height", "text": "Individual Scanline Scale", "default": 100, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "shadow_alpha", "text": "Shadow Mask Amount", "default": 0, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "vec2", "name": "shadow_count", "text": "Shadow Mask Pixel Count ", "default": [ 60, 40 ], "max": [ 400, 400 ], "min": [ 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "vec2", "name": "shadow_uv_size", "text": "Shadow Mask UV Size ", "default": [ 48, 64 ], "max": [ 256, 256 ], "min": [ 0, 0 ], "step": 1, "scale": 0.00390625, "format": "%1.7f", "screen": "crt" }, + { "type": "vec2", "name": "shadow_uv_offset", "text": "Shadow Mask UV Offset ", "default": [ 0, 0 ], "max": [ 256, 256 ], "min": [ 0, 0 ], "step": 1, "scale": 0.00390625, "format": "%1.7f", "screen": "crt" }, + { "type": "int_enum", "name": "shadow_tile_mode", "text": "Shadow Mask Tile Mode", "default": 0, "max": 1, "min": 0, "step": 1, "scale": 1.0, "format": "%s", "screen": "crt", "strings": [ "Screen", "Source" ] }, + { "type": "float", "name": "humbar_alpha", "text": "Hum Bar Amount", "default": 0, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.7f", "screen": "crt" }, + { "type": "float", "name": "humbar_hertz_rate", "text": "Hum Bar Frequency", "default": 100, "max": 10000, "min": 0, "step": 1, "scale": 0.00001, "format": "%1.2f", "screen": "crt" }, + { "type": "color", "name": "floor", "text": "Signal Floor, ", "default": [ 0, 0, 0 ], "max": [ 100, 100, 100 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "color", "name": "power", "text": "Signal Exponent, ", "default": [ 100, 100, 100 ], "max": [ 400, 400, 400 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + + { "type": "float", "name": "curvature", "text": "Screen Curvature Amount", "default": 0, "max": 200, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "round_corner", "text": "Rounded Corner Amount", "default": 0, "max": 200, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "smooth_border", "text": "Smooth Border Amount", "default": 0, "max": 200, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "vignetting", "text": "Vignetting Amount", "default": 0, "max": 200, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "reflection", "text": "Reflection Amount", "default": 0, "max": 200, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" } ], "parameters": [ - { "name": "jitter", "type": "frame", "period": 2 } + { "name": "jitter", "type": "frame", "period": 2 }, + { "name": "time", "type": "time", "limit": 0.0 } ], "targets": [ { @@ -40,12 +68,6 @@ "prescale": 1, "doublebuffer": true }, - { - "name": "deadend", - "mode": "guest", - "prescale": 1, - "doublebuffer": true - }, { "name": "native", "mode": "native", "prescale": 1, @@ -55,6 +77,12 @@ "mode": "native", "prescale": 1, "doublebuffer": true + }, + { "name": "bloom", + "mode": "native", + "prescale": 1, + "doublebuffer": true, + "pyramid": true } ], "passes": [ @@ -141,6 +169,15 @@ }, { "effect": "deconverge", "name": "Deconvergence", + "disablewhen": [ + { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "converge_red", "value": [ 0, 0 ] }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "converge_green", "value": [ 0, 0 ] }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "converge_blue", "value": [ 0, 0 ] }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "radial_converge_red", "value": [ 0, 0 ] }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "radial_converge_green", "value": [ 0, 0 ] }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "radial_converge_blue", "value": [ 0, 0 ] } + ], "uniforms": [ { "uniform": "u_converge_red", "slider": "converge_red" }, { "uniform": "u_converge_green", "slider": "converge_green" }, @@ -153,6 +190,123 @@ { "sampler": "DiffuseSampler", "texture": "native" } ], "output": "native" + }, + { "effect": "defocus", + "name": "Defocus Pass 1", + "disablewhen": [ + { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 }, + { "type": "slider", "condition": "equal", "combine": "or", "name": "defocus", "value": [ 0, 0 ] } + ], + "uniforms": [ + { "uniform": "u_defocus", "slider": "defocus" } + ], + "input": [ + { "sampler": "DiffuseSampler", "texture": "native" } + ], + "output": "native" + }, + { "effect": "defocus", + "name": "Defocus Pass 2", + "disablewhen": [ + { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 }, + { "type": "slider", "condition": "equal", "combine": "or", "name": "defocus", "value": [ 0, 0 ] } + ], + "uniforms": [ + { "uniform": "u_defocus", "slider": "defocus" } + ], + "input": [ + { "sampler": "DiffuseSampler", "texture": "native" } + ], + "output": "native" + }, + { "effect": "phosphor", + "name": "Phosphor Decay", + "disablewhen": [ + { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 }, + { "type": "slider", "condition": "equal", "combine": "or", "name": "phosphor", "value": [ 0, 0, 0 ] } + ], + "uniforms": [ + { "uniform": "u_passthrough", "value": [ 0 ] }, + { "uniform": "u_phosphor", "slider": "phosphor" } + ], + "input": [ + { "sampler": "s_tex", "texture": "native" }, + { "sampler": "s_prev", "texture": "previous" } + ], + "output": "native" + }, + { "effect": "phosphor", + "name": "Phosphor Store", + "disablewhen": [ + { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 }, + { "type": "slider", "condition": "equal", "combine": "or", "name": "phosphor", "value": [ 0, 0, 0 ] } + ], + "uniforms": [ + { "uniform": "u_passthrough", "value": [ 1 ] }, + { "uniform": "u_phosphor", "slider": "phosphor" } + ], + "input": [ + { "sampler": "s_tex", "texture": "native" }, + { "sampler": "s_prev", "texture": "native" } + ], + "output": "previous" + }, + { "effect": "post", + "name": "Non-Bloom Post Pass", + "disablewhen": [ + { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "scanline_alpha", "value": 0.0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "shadow_alpha", "value": 0.0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "humbar_alpha", "value": 0.0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "floor", "value": [ 0, 0, 0 ] }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "power", "value": [ 0, 0, 0 ] } + ], + "textures": [ { "name": "shadow" } ], + "uniforms": [ + { "uniform": "u_scanline_alpha", "slider": "scanline_alpha" }, + { "uniform": "u_scanline_scale", "slider": "scanline_scale" }, + { "uniform": "u_scanline_bright_scale", "slider": "scanline_bright_scale" }, + { "uniform": "u_scanline_bright_offset", "slider": "scanline_bright_offset" }, + { "uniform": "u_shadow_alpha", "slider": "shadow_alpha" }, + { "uniform": "u_shadow_count", "slider": "shadow_count" }, + { "uniform": "u_shadow_uv", "slider": "shadow_uv_size" }, + { "uniform": "u_shadow_uv_offset", "slider": "shadow_uv_offset" }, + { "uniform": "u_shadow_tile_mode", "slider": "shadow_tile_mode" }, + { "uniform": "u_humbar_alpha", "slider": "humbar_alpha" }, + { "uniform": "u_humbar_hertz_rate", "slider": "humbar_hertz_rate" }, + { "uniform": "u_floor", "slider": "floor" }, + { "uniform": "u_power", "slider": "power" }, + { "uniform": "u_scanline_jitter", "slider": "scanline_jitter_amount" }, + { "uniform": "u_jitter_amount", "parameter": "jitter" }, + { "uniform": "u_time", "parameter": "time" } + ], + "input": [ + { "sampler": "DiffuseSampler", "texture": "native" }, + { "sampler": "ShadowSampler", "texture": "shadow" } + ], + "output": "native" + }, + { "effect": "distortion", + "name": "Distortion Pass", + "disablewhen": [ + { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "curvature", "value": 0.0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "round_corner", "value": 0.0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "smooth_border", "value": 0.0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "vignetting", "value": 0.0 }, + { "type": "slider", "condition": "equal", "combine": "and", "name": "reflection", "value": 0.0 } + ], + "uniforms": [ + { "uniform": "u_curvature", "slider": "curvature" }, + { "uniform": "u_round_corner", "slider": "round_corner" }, + { "uniform": "u_smooth_border", "slider": "smooth_border" }, + { "uniform": "u_vignetting", "slider": "vignetting" }, + { "uniform": "u_reflection", "slider": "reflection" } + ], + "input": [ + { "sampler": "DiffuseSampler", "texture": "native" } + ], + "output": "native" } ], "output": "native" diff --git a/bgfx/effects/bloom_scale.json b/bgfx/effects/bloom_scale.json new file mode 100644 index 00000000000..0dfcdcee712 --- /dev/null +++ b/bgfx/effects/bloom_scale.json @@ -0,0 +1,23 @@ +{ + "blend": { + "equation": "add", + "srcColor": "srcAlpha", + "dstColor": "1-srcAlpha", + "srcAlpha": "srcAlpha", + "dstAlpha": "1-srcAlpha" + }, + "depth": { + "function": "always" + }, + "cull": { "mode": "none" }, + "write": { + "rgb": "true", + "alpha": "true" + }, + "vertex": "vs_bloom_scale", + "fragment": "fs_bloom_scale", + "uniforms": [ + { "name": "DiffuseSampler", "type": "int", "values": [ 1.0 ] }, + { "name": "u_source_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/defocus.json b/bgfx/effects/defocus.json new file mode 100644 index 00000000000..bfbba4b388a --- /dev/null +++ b/bgfx/effects/defocus.json @@ -0,0 +1,26 @@ +{ + "blend": { + "equation": "add", + "srcColor": "srcAlpha", + "dstColor": "1-srcAlpha", + "srcAlpha": "srcAlpha", + "dstAlpha": "1-srcAlpha" + }, + "depth": { + "function": "always" + }, + "cull": { "mode": "none" }, + "write": { + "rgb": "true", + "alpha": "true" + }, + "vertex": "vs_defocus", + "fragment": "fs_defocus", + "uniforms": [ + { "name": "DiffuseSampler", "type": "int", "values": [ 1.0 ] }, + { "name": "u_screen_dims", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_swap_xy", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_quad_dims", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_defocus", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/distortion.json b/bgfx/effects/distortion.json new file mode 100644 index 00000000000..785a1e8ee4d --- /dev/null +++ b/bgfx/effects/distortion.json @@ -0,0 +1,29 @@ +{ + "blend": { + "equation": "add", + "srcColor": "srcAlpha", + "dstColor": "1-srcAlpha", + "srcAlpha": "srcAlpha", + "dstAlpha": "1-srcAlpha" + }, + "depth": { + "function": "always" + }, + "cull": { "mode": "none" }, + "write": { + "rgb": "true", + "alpha": "true" + }, + "vertex": "vs_distortion", + "fragment": "fs_distortion", + "uniforms": [ + { "name": "DiffuseSampler", "type": "int", "values": [ 0.0 ] }, + { "name": "u_screen_dims", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_curvature", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_round_corner", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_smooth_border", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_vignetting", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_reflection", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_rotation_type", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + ] +} \ No newline at end of file diff --git a/bgfx/effects/ntsc_decode.json b/bgfx/effects/ntsc_decode.json index fdbdb847146..ba57ae65f26 100644 --- a/bgfx/effects/ntsc_decode.json +++ b/bgfx/effects/ntsc_decode.json @@ -18,8 +18,7 @@ "fragment": "fs_ntsc_decode", "uniforms": [ { "name": "DiffuseSampler", "type": "int", "values": [ 1.0 ] }, - { "name": "u_texsize", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, - { "name": "u_screenrect", "type": "vec4", "values": [ 0.5, 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": [ 3.5795454, 0.0, 0.0, 0.0 ] }, diff --git a/bgfx/effects/ntsc_encode.json b/bgfx/effects/ntsc_encode.json index b0284799839..4d622b0dc10 100644 --- a/bgfx/effects/ntsc_encode.json +++ b/bgfx/effects/ntsc_encode.json @@ -18,8 +18,7 @@ "fragment": "fs_ntsc_encode", "uniforms": [ { "name": "DiffuseSampler", "type": "int", "values": [ 1.0 ] }, - { "name": "u_texsize", "type": "vec4", "values": [ 0.5, 0.0, 0.0, 0.0 ] }, - { "name": "u_screenrect", "type": "vec4", "values": [ 0.5, 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": [ 3.5795454, 0.0, 0.0, 0.0 ] }, diff --git a/bgfx/effects/post.json b/bgfx/effects/post.json new file mode 100644 index 00000000000..3afcc66b7ef --- /dev/null +++ b/bgfx/effects/post.json @@ -0,0 +1,49 @@ +{ + "blend": { + "equation": "add", + "srcColor": "srcAlpha", + "dstColor": "1-srcAlpha", + "srcAlpha": "srcAlpha", + "dstAlpha": "1-srcAlpha" + }, + "depth": { + "function": "always" + }, + "cull": { "mode": "none" }, + "write": { + "rgb": "true", + "alpha": "true" + }, + "vertex": "vs_post", + "fragment": "fs_post", + "uniforms": [ + { "name": "DiffuseSampler", "type": "int", "values": [ 0.0 ] }, + { "name": "ShadowSampler", "type": "int", "values": [ 1.0 ] }, + { "name": "u_swap_xy", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_screen_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_source_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_shadow_dims", "type": "vec4", "values": [ 32.0, 32.0, 0.0, 0.0 ] }, + { "name": "u_shadow_uv_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_prepare_bloom", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_prepare_vector", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_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_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_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_scanline_height", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_back_color", "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": [ 6.0, 4.0, 0.0, 0.0 ] }, + { "name": "u_shadow_uv", "type": "vec4", "values": [ 0.25, 0.25, 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 ] } + ] +} \ No newline at end of file diff --git a/bgfx/shaders/dx11/fs_blit.bin b/bgfx/shaders/dx11/fs_blit.bin index bcc74538c3371dc358be8ff229299f6bc8698c3c..c395c6baf6436066dafeb2786299fa6dc7ae4daf 100644 GIT binary patch delta 1139 zcmbQSo@vH@rU~NG^IamGoOi`5Mt*0i-?!?8=v&|QGk!BNFfi22-)I!i$T)BEBt|V> zf1p4FNE8UXH*aJ=&A53AGba<{hs_I_KQnHg$j;6pao_ZL7)VL5$?Jz#HII3&@UvXDpV_fdov&MMyFZTdefh*^qisX6MO_~_^=zz+FY0i_QeAP5}Gcq&; z0F40B3?&e{0ZKDW0P^<$<-zpkmA(s^m=fwY`viRA7>#PWM)ed%UUpzy6acXW5Hn6@ z^bp?M-o(o|`2pjq%~P67cvv22u z1`32QZtk0YiE;B3W=oL&-EW8r>>{uO_rLAjEs{nGU`vh;;z8fIR9jPn9=56?g6X<+pbOR=N6GOmskF@ z;Plg_MU$g^)il>LGBgALjR4XNB@ns+N;6CV@;3nG!Sv>pz6+U{1lDc#3HZc;-B}YD z71@DWK)?csK`yfd;sPLs0hY}d8F_%A(OSa8^27QY<7S>oJ&ZWRV)2H_OkCfM7#JFW z`ooMS@0zN_>j7k{1F<_0J5GK%HG6Wzv<5*ZAkP_yU4YmPh+Tmpu%6L#^TO%OOaNvM Bh)4hc diff --git a/bgfx/shaders/dx11/fs_color.bin b/bgfx/shaders/dx11/fs_color.bin index 29925bc9dd2b2f396ef4c9a1a5a219e6728e450b..3682b2f778bd41ed35c972ecbd21b6d4fdcde9d9 100644 GIT binary patch delta 1341 zcmeHHT}YEr7=F*U>D)(}5|Wn6vHaQ0)G4`A2Fs~w+7J1AlXKc9NXspqW1Hlpn@S3b z53SH)7=&~Y#u17LBEpmmLGU69^P-D>EWAmqgw=c8mm@E_?5Yo*^SsZ)b6#FJFW=fz zVQo&hdVc3vX=90Hp+5O?%on>aZu`=FNs+&a0Dx=kexN}hcjOfzE4l^^J9qIr&Qi5A zgsrNzf&f8AB34jDsnrRK``*{{O#Z}xs^#4U%dLU^ktx@v-rn98txj2*Re|{v0Wn>G z;bj31rV*G20a70jkQbRD?yD$IC&#j_&1W@oUYdqwCe;xpq>rcg+w2aTtAMt(do0~8 zQnkZzy4$H!OshMau9wtmcbwX&T@Gip8$P?kG}Y~ z>kYf!u=Ir!2I}Xi6^4hXr%)>luTamTRv12`o<^-O zBw)`Ms1*h?>KW7uLoSTJ`fZkI^{S0Nqh&{YQHN+WtM-ij+>q*=)=pSg>rIWSNu^d zvk*rR<%l#yq}&*2)s|vahDetm2ONgoSY;qG5jun(!ROk8IE1J`R3fSnhY{7d{nyDc TMn=977CZ7Wbl|W?p&5Pw&q#|` delta 608 zcmaKpO-NKx6vxlGzH#OaDGd=#TIR=$`9X-#BWRJ6`TBAuA!Zs8iir_iB$nYKFlcBI zwNT6(WuT3N?TRq(V*H4-APQPpQd+bUD=K)K(mc3>(9i% z)#A~n*2Y7-vTt46P6nv$^MOJAMQtY&QP1e(k+|S{@|UP7XhEah?qZ!#W%_GYYnm=N zrP#HK+M{XybG^%_>@Dpbe?ELan=~iyzrUM)7;7BcQlORWeM1!b#^enO8ny%-3@|N_ zpt3B}&_`A8`{`8=D&j0x5?htAquZ@SaJ)o$Ow;AfSvkudJZmU!&as}n*|DTuo@bWz zd3ADMq%?n_>s>5tsMC=P?#=4=o$(tDErqW-{n=~2FFyGxT6qPxq@oysq)W&txRW#l zpN2b0lkge1le7qb4tJ7%z@NaKBtK?8g*!N-!1C92zL>r0c*QxRGi&RxL#6 zk$f4y%?Wj;)%5)PAqF++@86_f#O*jw`=xcORIT;*6y|-MSXEskef*yvNDHrJ5T$T1 zY{;FN^6g=i)u0(PfeMfhYGpK&nj?zG IScnAu1#gk4(EtDd diff --git a/bgfx/shaders/dx11/fs_deconverge.bin b/bgfx/shaders/dx11/fs_deconverge.bin index 7c949f52c1d03eea32fe008da6d4b47905dca05f..abf36790d75501c3455ecb1800e15b684b289292 100644 GIT binary patch delta 1224 zcmaEMfa%!*rU`NaSM)YGr}z7E>LvJVh{solZ`4a*;!I#<00ZC6jU1;LHz%=hG69M2 zKo$oJi^K!d=V2fPmRiRY7S(z9_owWQjN`anvAK@t4>Pmt9p=ro0>a#zOJW<@C$CRo z-7FCk&baw&${xA;w4D6J5@Ut5%nIkyq*R~${Or;K4X9vznT`UOsSux&p8{u>rD}3jb3v3PRw&piBqkMW#Fyz+Xj;QWD-oiV2+=B#Xgx%66U&ic(8Ti}HZRZ(iFxk7@E@ z*ZGq-Fs&9DK;-v{JFX@(;}{$3y-N;ABG z%0p>}KTtlDW)J|H3DOUx8FYaB{XjmHW?*D6-@G)Snu)2PZnIMGH;&Q7L$}1Uh)LES z7+ZEgj0`}Ds0N5xCNE@KusNxtgol~Kux0bjDZPw13xLIS)0nuDO&J&(fEu@%OzxPW zBjU}4>y#KFQMkyHIRjFEwXAtdfy=~|bI{tMV#G@ZPZJU7?z{9$HRy}_`#RzR40 zvzT%?<7VNwHulY5)Aq=1u6MCy=KA;k-+PeOyT+SyJpM7V-90klCQHra0mfkPoF9UO?rcG{YY#A4)R_0L=vHhtdo>K>lVRA4)SYGMH~(8dS~1v|!z4 zrO7hy diff --git a/bgfx/shaders/dx11/fs_defocus.bin b/bgfx/shaders/dx11/fs_defocus.bin new file mode 100644 index 0000000000000000000000000000000000000000..4ae1928129d6b86157bcfd894ed99c9d0d80008b GIT binary patch literal 47854 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

m1p7N5c2;s}UL}a&=`F&r_J#u^PKhy1X2mB)Sxq zYyr*}j34s=QXYxRfip-?Bc;b{Z-JfSK^b@TMTnBou~_dHr*>??yw3TaQ9yVEcVd9N zLzm0q07Kzz5+UZ>EI!)!8vceiuQ$f{hg8J6u@2gNt%JI7Zdj{4g}?qS zz&5_Hxgg_yZx#I?-6nqT6Stw~AA@QR(jFwP4a~ts|J~+7=Vq#9>@O!av?E%MaCA)P zEXs-NeB^%&i5hVl%|;dQy||-M;kLuG1$OA1!#-Gc57;IuF4?bllA7*GYT++Sm5o!tN$keyuDzwT#CW}M8Jdd z5_c9DZIfj@7_sl;yb52yHSXe9#>)kj{gqQ*O2NkB+7CW>0LG literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/fs_distortion.bin b/bgfx/shaders/dx11/fs_distortion.bin new file mode 100644 index 0000000000000000000000000000000000000000..5d9fc69760937af0c0be11ff25c6cf7451fd9c73 GIT binary patch literal 56047 zcmeHw4QySHYCX|CB__k}X@ZD0^+kDfL7?iZ3Gh z==UCFN^!E!zX;Hzn_YN|ED&_l!kYw5iY>4Knrs(|n?IyQx=68Z6Qpk8U1WC?z}VPs zuuY3%)9;%(Gk5Og&w;B7PSdE*DX&~E6a;BQ`42|VyU`C1<1S}s0)=! zeQxSpr8>jh408LHr!JPyFP7@{^5Xd|YTRU1OSAK(>3X@cxJ8{ZxYbI%$c(A_r6p8z z7P;3>lxJs`Yo$zrY)t%M;-SMwK6oVf!{ht^^6O9h`ybx)$KU`n z4(zhNo0ZyFMW^xVY6K?6|Bi9|Q;mc8hr4kErAE>0-?6X~cj%JFS6FVY##cJVc^An$ z0NlQu;5>MZsZZbz_^{s+7$5#Ky{q7XW3HnDk9Kq)miu052W6ZXH*jNUC+laPZ71(L z#_>-zNRMr`SMS#>>{cVYj&WP0u#~%wqUMMqOmKNn|Y1uqepL$X19fuydwpbV&H!HJsu&g=l#sT(&Yp>em z+H2~3@t}!cImmvnaF(vE`}#n2+cK-)lvkIuajp9I{_C;-a0^6hd9!p0p93!S(DtY8 zU+~-aHKF^N>!L6n<3I>6j;Vv_|K7twi~UZT9pg&9C;0NAFaP!+?#y*B+5N6k7Isiz z$xA#>%OrUHu5I8wUgo#ew#U-)``DHl`8J%s6W_|x!dN+H(Uz}yZLqvsoufQ>?E{V5 z0mo~Pz*`=C8Wz4|oRHD$PUzzsz@-hL?0Fsih>5Me_v^8|+Isvl%Y%jCn55h^P2tb> z4cgyr``+dqZ3G%t{yE)n>lqWB*K4+6{p5ZxaJ1oA1 zv9Z;0pQf!N@AZ|17kL~cUKPAhN9;H~+F{b1L;phfjLx~NCA_+N3_Qm*Y4PfkxMQ5D z#=+Uy*@OT2J16uU`OmL4FyPCzd7Gynb}k_%`Llg$+aq#0Sdc!Xepno~gXO*7d(U2u zRjW&Xd%dZXZPfY%{uqOXuW!z_peS2$bb9LTG6lbKq^mWQ~EC&ae}V~%u30@Y>VQ0~Se`)^AOPx?MGpL)1t#;tpr$;R@*F%icz zv>Rqj1V&%1-f&Ft8i72Xk}?aA#b09b)Wl)+r%K&ho~~AEmDzf5WY>`$JA!*Bj|QXZ zOeWd8ZDNuH(7Ej2^9bKy<8jTJsQv$KAb}Tu-oAdFB> z=>1Ty&d3Ei9qgBa^vb1RFsM#1r3_&D^1$BSY6d28SS?&NtB=2VR%`X@@^n3j$Z&G5I8%8X0u!kosVpoN ztL0i{aT2d|N`Y(h-d@){WQvF&fW1ZnS^$PvZX()ECf5nLNoTFs1xFT^PLwW|=D&rP zDa%hM)c^dOggW&shBO}fZu?k5{mx%?s(*8Phk7}w)PFnBseb%ghx*`OcB*%mJJk#S zJ)ypRe}_8zrwKLu%?{OjM~AwQO{hcL6Y6tVNPHNy>Q5;3#2+Yi0kCI&vqQ~%IiWuM zgM_;6-=PlkX!_O}ByVF*n<;Rpx>u*Lu^}5(*|@Uiyy3c@vNp9BVwl!47$+(-SH^%0 zo?vR8l?GS-L(@#^C_a4+PHI^%t0mTc`mRD9x5b`H7fyTbqGj zv2~-g{DqpxCG3(`f&p?qsFg35_V!xwc}vB+O7)5ILTRyvk6>ykf~8l6G%7}N7sO#F&9T^@(Zi?#Z_%kwEoPF*ZbTVbqV(q5>q3&MInLPa~^@IVz3W6Yz7hYF+@nwBI33MVj+eIPAwvC zTOfw4-uc*aQTnnqzj)kj!mx+lnrk0DWZOe;&AX4D3(i+dc#N!Gp{Nf;IA4X^l5Zck zu)5xsO#8SIp1oGLl=%U_)p@^mk3wtqeF_o&JqoQG;Zw*3i

E*^>L)e9U|dvnAIN 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 aCkRsrMTD~m=Mdh^MZ4R+ew`(-r2aoz(Z-$t literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/fs_gui.bin b/bgfx/shaders/dx11/fs_gui.bin index ab00cc60da6193f9aff5cb166eb2039585db8d39..d08762737a01591eaf2808284667e58944d6c67a 100644 GIT binary patch delta 1135 zcmbQSo@vH@rU~NG^IamGoZICRGf(W^oB#E?(XqZrHGM_~28NpX8;#-_8Rt!&#HhvV z4-|+1i2{N5=8f#988=U1=44|0uz4Z#XU5GF+1Xhn9+*B411b4E=l%ZoH?R4xx}RWw zp`}=K^9Jre%*?^}88@%z7v|nPBdU>o@>wPJ%}1m{88^>Y-Xm9^mXn`YVyuvsS>aro zl3BFB|@|kAzB3zt%oSCf(w`Bf(-$Z8X%llp`(yksR<+yN{W*cb5ent4fPBZ zbQMx73XC*B?$cDzSBOVANvngY-i1w~s0kkOh7)e0cTDQMX$fXoR=wN|KwsHsF# zQwdXpP*R1aqzXkzQEEwPQ6A9v%@-S1F;2e3Xv_8Q{lE91cri5DJkRwXBd12o{{6Of z7a18RUu4vue8pXX?MlAhrbEV?f4K*+3cR^-rbRLOz#(^A<6|?$MG_`Q`KoE|W@Kmx z02%?L8A^ck9v~k|GfV*T_X7D~dh<%(g-lEdb(?(xK5&diHQl0m9iw0#Fdoc-7!Ed1 zXkuZU{D5)Q<|)l3JS;ynav3)BOz2_6nNb&Sn8?JHXu`nI05s!}@#I~Tm3TdYOm!gk z0Ai=fFDGX+I!+Fp(k$o<?P6z=2y2E>P delta 434 zcmbQSpJ~Q=rU~NG(_JE*oHLbAJhguPsW;z#=YFNSxuJ{<3=B2XHyXt=GESR3iBXHq z8z>OMxVdloCC1HDm^qmke{5dJ{F!m{M0R!-iJa=kVIUpxeQY1jeoJuJczn`a{c{}q zH*etn!_2(u64U1O{KDLuJ(R*3C+jD&PUe&r*z6No$i8{L@*cU(8=W6BZhpWR#>n;W z{lE7hb8Z`Lp6B|HkyCQc+M6sj7a18RUu4vue8pXXO@`lUYL3z7U+w{{0#iSC%T7#~ z(Gc9bJ@oa~h^v#MeAP79Gcq&;0F40B3?)E%1CS4;872Vv8-aWo)rY zeBi+Cv}KH<>_BZGU=E?cWZvdy%`Cu>Xf5Gkv9Ni^xS3~C41co)*$Evlr;aFPzTI1OPfR BkOu$& diff --git a/bgfx/shaders/dx11/fs_ntsc_decode.bin b/bgfx/shaders/dx11/fs_ntsc_decode.bin index 0b32595c26b54472ddb624851651a1d32d573645..5052d7790f5f359445b22da354fd2e3878bef0c1 100644 GIT binary patch delta 6415 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 LJN}%mAEf^Ru`W8g delta 6876 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 sv_PALsmI?w{G4y^;7(Moj+rA=Fu z4q!}ogCBSkgR#b9D^#Nk-4_T(HoI9rcGbqTuDgP=il$1UBm!X#8V&oqZ|%JyIRTs^49Hl%d5bVj>&ZVR`xwms09P94O^ zQPmcSbajTy7(qMmdR1ek|BL5aDjzSqc4F9na(>MZPmaR`3y~FA1{r~zfjnY6`1K!h zM?hCVD}q}SoT?w!pbKw(*3VkK$er2qd6_MU z(qpz;@Lq4v=HoV}D*98MCi}oI+0qPO;o-C8r=%kz@rX#G&I0f|?6;~SgE;r9y-pnv zDxS^y<>dF6KH;3B=#$R>ppnhEz;KG@7fx!jYhY3b$BG%(!EqO zidsv1wDm@LSG1!x+#PNg73$mi!bM5Dlj3fn9?hqPwsv}2x=VYCye8W_&Gt^SeS+RGCVdW-OycIn&}Y7e7wd1;weqJ?`pmU~2gMcOj0Wp-}fq_&8L zDB41wCPEi!yET!Vw#282I1OR1_Hf*%ca~4D=`-!pH_N4OhRe?IuCARAB0P5;`gl&l z=G9Z5d4%z*wdFI&ht?J=`cJimmgK~p&Wi*2E`N_!tku*-BAww~DEWK&w?q5%3jsgl z6C0e0*UQJoDs^}LX=YDt+V*GP9{y>=23y12g8NVFD>fD@t~XUaH7rn=mCR-%0c?OPMti8f{DO=lsj3306aVpFYJfOXC&$lUz)ySxiV46O$Z$2&wa zpyc_pclnI1!_Y+!pS&m2;CZW1GIKmXn)L2K{-BhP9TNLn<;5gEDI2rCYLC6<@u@uTG&Vqf=}iKe)v!wLzA{ z|G8zA3IqOQERD}^UgZeluwYcfw>A5I6En(g<9raKWp>Ww&G9yyjPnJGo1bm=h6aD3 zw#l2bXx27)5w(!+bPWJ6Iq<^qFX>d%; z@f_o&Em(FMSZsww++!i6$p{BM7mGv66pZ+PhpoxLsFNBnJdI0n$2HtU2I!JZmQpJbQ^RZ>?@`HW}XoqV-5VRu-_HHI6VXzg`9&p`NGKEd?IpE8QL>E zaIgCRtH%HERpV(Jc0TRlzdt;rPrTq%*a$y(IA6ayGR5*nVOfa@|2G7y)7XRpOBDX~ zkwVu?l2);-1-+gZ9bJ|5uw-8(zVB!izI1;(8s(ZJj|WDBz;56Y-~zt=rH!t3R2zq! zflNUz=`Keq?zu0gEAUC;6Gxo-)mNO#&5LNgD;Wo}6HXm;-FOnOQk~$J@cG9U%(!;( zV?KsBHGJZDtukWeH;rXw{9Rs`24vR9?|qQ38CxjK_m33<^ryxu*)QI*hcEt7S-ss$ z6hn)re~Vp_LR5otGQLF5s;NyyfqC7@us9aw& zj*~XgJ$0JcI!=O)KRDF%IH{T1sZI3<6UXM^WJq+TY3p=4O{b#MVcOJUzje+&mm^L3 z7xcio-&v2n*4k_Dz3#rh{D*eqpPEtARO=J_@BKdUh!NXj3~cI;4)$&TZZwT{lAzGQ zroL^x(ddre=(heeia`{t-rm(U&=(C00+)WVy0x-+Hab4!$pphF#O&<2a!M44eKKELFj5G+1Q<@v zc4BH3L^o$&#iu=g01@H_-F!=w-z+r_>Y$qw`{1WWb8^JEBzK%v!J61gFJ;Bd5tdRA zgqrHEaXg4;a$lrRRC@ODzmnv_{Xr$%oZ%$be9*+GO-|)d8N;2$vEXz?*s(hsBoLoz zKsj@DYdt#l!xgo4veH*7gxurXjn7HnllYwHpO4QK{sLS6SaKTdvD<8WA&>gm=DP0@ zUM)K(AwTgiH+aq2qmY?_dgDdjPIy|aEunXXRjemzV#->j{~hlkpYPG+oJ2DeP+3tw`@t+Tx!OTEiwQz!OWlMPiu#sa4kr|wMM;WGZP zL}vZ8(mJ^AqA(7=xA$Y;@cUS#U4f-?C}R5WUFyA?X`P4^XsLP

    FocNIqYNpst3 zhs&gfRDqTD;V%N6fEAm$a@`~6)9lJa({ef7@-2AdQ|4;D-qJmCueV1%a<8{g>(g__ zeWpk2@g{e+){Aj@sr3=qxOr;G-{VHHAND`*%pXG-Xdc7c>!UT7=-`h-0qLhdwN8%O?EdK`KVk8_0Z z@ddWSf4?nM-)YAfM**IlY8%xFciCK{Fa(0`Bb({L?E9L0w!O;m+4CtAVfkizsp3ARBKdjyO2f2u zwG@(-9V>&EZLV7$>L}Or1bJs;X0~pJe4J($)0OARsg6=D$2MM_^CiZvoGYJ8Yf}#a ziwt~VWrJjh>kxQ8=#sIqZ{nHkl*8nLL_N-H>?o*)jhI8=r41Bf1C2 zyl43l_~V-sKWjh-Am@#GSx`(Nb%TEkyh7rBa1p#hIsvIb!Yv4Iyg*2gfg_Mpx^bzz5DNpfvna&HgSw5xHLSPlzf2E9VT`<>`6jCZJ z^H|utY~8xxsUix|JZMTN1MP(|or;0Ql!l)GjH$SWPWxv2<#K%M8=^xV-d2@WhlS|} z{RqU1GXdh7HzeS@W=s}$zNu{l=`2vbeCkx8{N9)@2Ln66pUAuh!*S4U5I2?kAf2ywpIgOe(zLWQO%UKa zoah0bEMw_iYt^hp&4yeYa?_R-G3C?PdB8Q!f@| diff --git a/bgfx/shaders/dx11/fs_phosphor.bin b/bgfx/shaders/dx11/fs_phosphor.bin index bdea6c132ea0fab75bd7d355459e5ae0804bd034..13c34469be71e62b1e9bb3d6c38abcffd67b9e6c 100644 GIT binary patch delta 3147 zcmeHJYfMx}6h3p8#ocw$g#v}ZSfC0Nb;WH!YtqNM;N_vfZg&9})GoDZ zF)@M+snxXA)W(>!ZX2&nP1E@35A8eA(%PgCO@FkuO4tEz;G5}b993Tc|9_E)Y ze@68~+e;W6I@e-#qe=-P)gqUzFI(hrfP^g>z%;}iSOaJPkW45S0$372!&nLR0NA>? zDyb*~unu8A6R)zggs-ETu~tN|H+H|c$(F7r@@FP#B;}IUwG_a-8`Y_A1reZJMr2&m zi;Ys1Ptp2FO3E?mE?df1`QL6N^@iaSzg*vY&2_kYPh9ztE9uI6_B*B=*DVvg^PmKu zUuID9Jp#aV&OKz8&Xh2nC zr<`TmVbj#SA@1bfnqa1k4iFGsnZ+DE zlDFVgXsWes0kv~J_Xp&5T#))EPkF#wU+Qi3dh$G|g(Ti!u(cuJYpZX-ITZ0cT!Law zBl!w#tCrBR$+%f6o!5*!yKG`m`a(o1EYkD&qUUh2@>|6PW;yxP`{$icTxH_%BYEP- zH9Y=>t&hHvkq_!IEyT0uR0gFUCL*rh)Cx1UG2K*4O~&9M_KSzst#$hmWzoK5aK|$+ z3P94uM;KZrpnTX#5>*Bjnwvt2W?j*3X zIA^S6&)^oYTH*>>SFarjR-*06VxD_#_$(?iw1vv*V(Bx`@k9eo)^wb;}Rj!*PK$MvH^KGTNXQF&&< z%&2b?#KO;5Cp~(M9qiNLlb4HMKKIG3JD$|HYL{FG7y<~Zkq7%xi2=nOO0*y!VD@9a z#GorGp%>d1upO1^f>8UchO1kA9^2$3O4X^0*e2&ts@p|;v~4IMlhtYlGNXVC<=dzb zmFQAAB;d}HoQlCxlVvFLu$_xC9i5${;t3e+G<}lV_bVEnDSTCF%F(Js)@Rx&BGvY} z@eTm8V1tnnIxHh26iNX~qnS>wOWdg5mXZuJl1i{e{dUko3k(kpiZvUi7iST@Tc$;>b4x~upP*0L_(RK@i=cY5} z|AXg$DtNLi;ohHW4$*-TE&Ge;;6Fg8jUI@}6AnII0?Kso>3OC!9au6+JB~5FTBR_g zTR}`gleQ`QG$ny*+2XPKYN?a i-GhqjF;~+lOdsN(OBYJ|gE delta 2851 zcmd5;Z){Ul6hHU1>)N+&Ya8~5KN-($;23l3Mg`@cW9ym;4hmxkaj|x5=?I&f-5;7* zY$br8Mh15Q6cFSi>3sWD(VtRy3R0 zPCRNDId@tyA{tnrO!u)GfVBtxO)w77wxe6!Co#En=kq^pp`a5tn;$-t_|iX`du~BV z`{~Q-xbvoE$>$p-@SMjLw=<9zNZ`r>tf^#hsD(j2R`QP)3q0@K=~AYvVP_Ks-898&|58;gF!##uwEncQ`SF6PwA2nK@ksr%Q0Q zX)$ZNkfa3)FIpkTdP9MDIOY!zg+tyDX4AJLQ6*wVBRaE&@(2$O4)w(QhhsgpiACsg zB-GvC+aLF?kax@KJN6%#eEaI{t5n?MKK0es+sxMZtNmMRl8>(4WK);*@p7N~%i3yb zb|#0m4jXZ)p|s*2Ci&vFb-|<#XtrVqx*6o)*|mbe=^P8(Zo=&*+-bu3XKjsloYF}V zlg&6Z0=MP#IyNM@(}?E2OoK|+oeS-Qt^2scL-%OTtx*@=D{V6~fG zH#_{ZQG7~L_{pGi2UU|nC&kkOf)P;QqJD%^K!H=hh0x|cfYM4N43G;BmcJ@bu~yo_ zVb5R5lFmxBKoce)^Zwwvz6@#%6nxH%mO-8HyQ2x5qDipcEh1i+5z!_&EB!{u^d!Z+ z6EXF(=6N2aH)DMQ7h5UTCvdTqgi}EUKJTtf-on$#^tIRJ2b`Vhy_m?-{1)~iII*gQ zc!%NQk#GQ3;=96^Z>-_z4F#!At?uM)W?llfnsBPSz^M{+Bt>2Vr;VlxNnnE;IHvqD z1i09~TaO-{-gfr;P&j?+%J40`E2jZca1D*r82*yP#OA?H3r%8I8Keyf8PrdsZb+C! zeFAkuYIDd=b5UxM&!A2jpoCevOdAq>46k=0_zVKAf^sH_WXHJ5bolO~=_52~Lt;4Hi#+kp*(J zV11#%aNj_0G!BH>3~VTx7#fa8p&W9G$W1PPrK5t``KgYQhv-O^;Ep>`dVqPfJZPTL z3&8HuITmp8^BuEGf`t@UhSH)!`n z&=uRB*sSk#gI_x-x-B1Vcw?wj(%Ve-FY&jx`ZwX5iZ}P1#}xcC^>2Oh@iDvl@@paJ)9{NL{-=gNI7axo zvB%{s{t2QNBb!yn$Eu}zU8fs{k|qn;so~*;6UN8A741~($%eo9??>m>-EWp;>=4tU vkf)^De5{$>=il1v*Vuwl^uGangl1qn=L5W<0LoET;vEpgu}f9o{5t1v7)KhQ diff --git a/bgfx/shaders/dx11/fs_post.bin b/bgfx/shaders/dx11/fs_post.bin new file mode 100644 index 0000000000000000000000000000000000000000..ae60d4bcca020199a5c9fdc6523c1912b38a5618 GIT binary patch literal 57905 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 TPzET4Z>AU9SWgtIxgzuv;+v2n delta 641 zcmZ{hO=uHA7>2)@-KNw25H*_}P^9}LgutKmn(F=?C-^n1j(&QS~%J~#)8HZ=z^rH$SJs!bPqlacamn|1-O&+1^xu?BWnQ$=o{xe3qqxD_qEz9L@}J)K$NiSKSPp1X3d(JSjR(F=TB9a^840i|K7z1 zQVH?jYr9*Rl%7)^MB~_5Y*#PRjhp*X?gWRyLC^?Xphf*ipAi9d`c5)v!ka)d*a2!m b5cGgv&<7&m5bpE7h;lBotg)4GNg1YJ(^|4$ diff --git a/bgfx/shaders/dx11/fs_screen.bin b/bgfx/shaders/dx11/fs_screen.bin index b8102b8b1c0c7e5874147a1f2ddd1b0a01afbed0..0a90b724289beb2a4826f703126d627c91ab7d4d 100644 GIT binary patch delta 1127 zcmbQSo@vH@rU~NG^IamGoW&JCFwPJ%}1m{88^>Y-Xm9^mXn`YVyuvs zS>arol3BFB|@|kAzB3zt%oSCf(w`Bf(-$Z8X%llp`(yksR<+yN{W*cb5ent z4fPBZbQMx73XC*B?$cDzSBOVANvngY-i1w~s0kkOh7)e0cTDQMX$fXoR=wN|Kw zsHsF#QwdXpP*R1aqzXkzQEEwPQ6A9v&EZbZ8M*$w|MwmgFN!9c=eho4@?d)NO5cS{Obqp#eFDC5j7BvbqxyQo3`WM1$puZ~tiT9i zVA*_;aT73;Hka@)ebCsk delta 428 zcmbQSpJ~Q=rU~NG(_JE*oSQE`++zJm>vB)H=+^^x)O#5j7#M1%Z#0T$WSlm65~CKI zH&7siadY4FON^VRFmp07{@A>b`7`6@iR|nw64}*{!$3M-u9&YXmVeWA|4Rjqb`zf2 zn>TR(VPMn=eTfvTvTRyhm>HM(4+jn;$TSF>?KT|L;A> zjMGM&=eho4@UvXDpYn*>FKFnzIFZTdefo<2O_H&EKnaeAG zT5$U5(xS;xzG|B585tS^fJOjmh7t(f0Hqlw0Qnn$@?d)NO5cS{OakjR`viRBz~(H& zrYVe)KphNLAOZ?NuCoT>lFj#;d4QqNTEfG$LS-}8q&`NRA+UJEWG1fPMhpxMK#gHW ylXp#3;`IPB)q&U@h#e=toSHp3Vp@Zs6OiWbSW2E?vFf3Iis+`Mo)GZO%Yn~Sgj diff --git a/bgfx/shaders/dx11/fs_tint.bin b/bgfx/shaders/dx11/fs_tint.bin index bae1d78d0b5f1e9bdfcf0b3d2389ed7e0cf0e66d..3aaeb95dc941f235bb6bddf4347f0df7cd36654d 100644 GIT binary patch delta 1260 zcmdnIfobyrrU_2c^IamGoReMEs}4V0P;D2^$SU>v&lN@n28K8DH^!c4WSloymr0A) zA1Dw55(NUE&4C=J88_>*a56DI*lfu14anwTVUc)X`aBGzgn6IUr+CSK-ZMUOM41Js zI&Svn`NORC>;@wPXD}lJmnsv3z<&k?M-@hfepf~Y#qEp?p^q3CHXdbQ;QYARFz67_ zI3YdG&8E?f?2`+USU1N?hcj;8mb5{xJ}oCdvBX#*EwjS8G%3|5KR>&)Km#fmU#6n~ zW-7$z)m#u|i4_XA3W-U@8u4X%6`IyC(Mp79B|@|c zBw7zqTm=^{%LN+(BsD-du|h{7u~HLAAe0m*C+4IAH5=*~DCjDrRumX%fZV64psx^* z?lx<#%rpg{DGG|V3Lv936{;0Lj#JRGRREb2l4`9`3sF;vrlu062BD-1O-U7slA_d- z(xN<|@tdDHc`{FKU|Ka<-;IN5zR6^PiPoD-+zvBxhMw5C-?r`|Bje;kCjH6z9tymn z>z8iSGhtu=#j?fZiOs^B8<-k^(d8w^BG4mvZ=p|c$!ocEF^xIb#M>r^`l)&DV`OMZ z04fI33_TFK0ZKD$fbyXh)}N}^ssCdd>|Aa({~WgupoJYh;arz4Q%1jH(nKTOHiR06V8fmjWQ)q$8D qh&6%O1&CdN*bRt1fY=?FNS8BuFE*UUwAo?WM@BFKbg?{>0RsTQSAK*5 delta 557 zcmdmdfNApvrU_2c(_JE*oLAX!WPZ4Mt~_3Bqa5qS^~V?)7#QA6-xzzIk#X8&T_!DF zZ=gU3NE8UXHV1N?X56gL!pX$=W3wU4Hz1pXg+(H#`f(UY$=PK`42{{2IxUp_QQVNn zHhHr*&mU$r{cB7NoWYC?T&heA0{RWuC0>!NKHdJXv6>_2v?f!;GAV zlNR4(skz9=IJuBXe{#N;g5ZO&=$SW+7#KhfvH)Vs&4o<;K$CsMSOnC|qROSWI3003 z7;`P>`vkkmp#f^1n;01y5`YSUG(!)BZh+DZ8=!nB&2RzAhtgnMHUss8Y}>r~NPr>} z(}s1Ep9f82{IIz$IGO{uU*wo3-)dXES-(SwYjOh<*JS-3j?KZ70+?8C#27GbUOuIV z5ofS2_MXPXRcXusw3dP4hSB8E8A_5KK&Cnny92Q!5Gw&O8xU(w?wJwKs66@0jBHgE pAYT=T)qt2Ch&6!N35cD6*ae8)fY=onj_VmcHyh4kWMVR4004?wpE3Xd diff --git a/bgfx/shaders/dx11/vs_blit.bin b/bgfx/shaders/dx11/vs_blit.bin index ef289c07bb2b992d0d75c549cbb8ab2e95bf7a7c..4d10fa1dae06b56268914fb26cf85ca28b3aa7b6 100644 GIT binary patch delta 1196 zcmX@Tf$8)HrU{Ays_IQY3NBpdFm#%?YV*&MM;i@om^eci8Nk46b0WuS#?6i_oJ@>A zHV3kNV4R%5!nWCwgM~%nuIckIkg`Jw&$xQ^7W%D!u|q%4QB-AfEKei<=55i9?349X zSU2C34riPkm@KmSyvkg;`m~(<#1dnLw9E?U(xg#Rsm#ANUF6$EksQvnwm4hehC5-j&zO8m)h2 zt#ZoPyy%kCS+3|pXlD9vyM$Ug*B52YDiK>1Lb;SZD# zrZ*e;Y4D7u1-hn%2FA%L&37kHU|O}=u|eqk43igt)3f90p)KD=;u5 z0Lk3RGy7x=4wzOMu0(6PUQ>nlLal z0FC%#JUM-m5~l}{sSd>MlP68eXLOwWZ&JOW6Oiu=#4bSW2E?wD8=2N`E@e8y2z0$E NCo?P1odOIF3;^odc60y$ delta 513 zcmX@Tf$8)HrU{AymM^_;{Me}#8)>9@^{nOJwvC21OiTfco2{o^V%+S=!pX$=XLBIS z2gb<>ENq({IapXEvZ^14F)}bPF!G+_4Sdn)xifWcQ+;^($IY=kjr^Nal*1V(E69j$ zekWbXJ~=R1Wb=8IxpJEixzsamZepn53H@B+$*(hPr~d@#M)$WMa@x7%wNC+}*xyV?9^GcVh;I2B5xWMw8R0C~>+2nd(67HhI#N{K>3SYXlvEJSQM_24YtrcA4DB gw3*RkbKta(jGGgtJz|_Zfk~H>nHA_*0R{&K036bnmjD0& diff --git a/bgfx/shaders/dx11/vs_color.bin b/bgfx/shaders/dx11/vs_color.bin index 1f44cbbc0c3f1c7dc03048e0a76dfc620c0aabac..400a7013784a6af725debd027bdcb423b96dee40 100644 GIT binary patch delta 1188 zcmX@Tf$8)HrU{Ayogr4y#_j<-VZi+R_-@{G-~JdOODcSJX`Pu5pq z-F#0voN@DRm5p-sX*v0cCB_PAnHA2ZNvS^h`Prof8c@ObG93jlQz1SlKLyS%$uICp zElbS-X$a1&O4a15=7K0otWdC3NK7i$h%eKt(6ok$Rw6_z5u#Nf(RzsDD!6c2F4zzt zsR6=?6*>xum6|{Tp`q&$^ITeY>eK|ivAdHUheUSMc`N7mDkG}t$$^$a?04e z=#taq&Aw`p`xzM;a)5e)G(!)BZh+DZTcCU>&2Rr{TwV}dUTnDxT--M24Ea3Ffb$l$=t~^ z`(z9bm}Y^5!5}v=GmjxJKQ9%?)7_=_k&yvY)8?mr35+;%{^HmPOkDF#7#JFWM*K0J zoIXj3(*wv<2V(chlP2XeI!^vKsb0_t$ae-}7a(>6V%N!yOzSt7GM!-ry55wNnHA_x I0R{&K08u4zh5!Hn delta 513 zcmX@Tf$8)HrU{Aye`@b|aXHSC@i&}lT^paPwb9Uqi79|_v-Pw~jGG-ADV2MdctX7%GRMg|6kzsegsm+Nu5FY@Qjw64qexH*=mk$-cFaya8;|0LGQ zsxktb-$@s;Z{Dr4QEu}gmwLv{txREzT>swxdk@ksX}sCn?H?oCO?R0aEH#t;J%ZTI z6fW7j%xLp+k3TE|TQe1AxBI@jcuJtvel5RZ=;Y15YLS~685(kcdVw@U4}@-j(hOUm zd??Lu1<2n9R1c*YUO@R!n&A(W52iO8`DyXsc6$xuGc(x|O`OY;ZDwQsG?kt6dTXC1CjJ55=Dg26 zpZhuIop;~8x9`d|W#O7K{Ixr?*Vi5F?P>}5TH6kGEATlmIDW2X*JgLAVKFyw`}WC{ z&5EmK+v#5!0FD3{5lhfcqtzfeq?+0D%=llp&4-04Zd~c*w^~tQwa{gXKUX zO)B-ZG^HlDxr3ern^)~j|AwiaRExsysovDP*iSba^M2Xz+iN7rUKpFXIXCMW`XcQ9 z$x-pI7K9fj*yvI-hv zpJe-!>;SRhxOm_p-FHw+f>%44Kjh^8eg|HXlI|9NdjNw=i%WPB4}?0(>{OqFuj9VQ zYpb-h?c2Obna$TOQnbaEI28zd|@pZBoUyX_n?aGCy7Q&SfS#qb1^415X+GvCDJI zrGC~>rkG>2HL%6R@7`t>6V;6?Y%zuQ*mBsO&A3BM#DDij}B03G`AO!r$@NNAR-Yyl)gl`Bz=kS2l`jT7@&11G1__Y!r^d-WO9G9pSL3%0%5pKwFiI9P_OXCuu9R0S-NKgk6-bB2DzC;+4zC@Uf z>mm~2mh>e;2F?h@ON4UtuTp+O@xsocH)fy`g7|#JV1pvW8OVhV8rtBnhVQ`z=}#lh zp}rGw7O_J^8ywMi8@wy=E6IPUPV5}Pzl7ZZ%d>O-**Q<={90Bm@Ed)cp+pUy2PiiuYoG2_6|`PUb*<(k+1t$H(mX2SFSU+KC}GqGvx#Yg=7=G{8uInGAGlR7gSaDSfb_3?1F+&7aajddGtaU7Y7*Pl`N@Up&SZGT5F7-e&KXS{8p$-qXq1E)l&FMAOs3EMxF0)X{OC1LpL?Hs z-}mm`yIy}k&p$uU_kXnB*U_@0V|!bB%eM5cHcn&2=&_Obmi1MGzGqHOz17k8#ENSl zFGzne&WJEV_M^QSt(VH~X!=9gfsDLR>~4;m#`ePPH<$I(fkR36p7;hs##i zRrI_LM0Htpy<$C&7ME)&NZLb<&3oHG%VpEZ(nB|VP)lu?jM!NXKU zD=iMvvzmv%qws45kAQbu9Hi$gJxI@MepBnmjNcV+td4KS^}uUVBwspsh23%-j>^}@S6ql!N5wt89^rY-CsK!2a!#VS zcOG`tDHrxW;y}ld_ZM1`d)cqD^`>u_NWcDzclN)5#KVV6JhL_?`&y*?H@LP2)nWqT z-Tq?Vk9ywfNQjH?`-^T2@`1%HAeRnQvHyILkL*3d@B1T0xQ|2$@OUoa4Z7acyD^Q^ zkAfpOb@fx&1S|y}0PY0B0757#Cf?Y=ZWpTt+m_q`doiHmmjKq^2l#%V8mIv_0tsxV bkJZZ7p=&uZGxSpq>aoC`<3t7hbcX&0xS)i| diff --git a/bgfx/shaders/dx11/vs_defocus.bin b/bgfx/shaders/dx11/vs_defocus.bin new file mode 100644 index 0000000000000000000000000000000000000000..61126720672ea0da0be6f7029aa994c9e48264af GIT binary patch literal 38987 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 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/vs_distortion.bin b/bgfx/shaders/dx11/vs_distortion.bin new file mode 100644 index 0000000000000000000000000000000000000000..3134e562a72b7a4b364f6041c5dfe2e097d082b1 GIT binary patch literal 38987 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 G92fv8O>uPq delta 492 zcmX@Tf$8)HrU{Ay-8B=B=e~{zJh*-SyuAl*Y}{yQ!^9N8xY>HzCC1H;ESyY?e>MlQ zd|;fMz{0lKk%NUrBCGmw7$XA%!$hCc4|l3v@?L0vT;b{UqJqt_JdOODQEkV`$|=2oUKMy`MF|Gfuk6E)uK?e>q6%{J2K220Ike~%!xGlfg`E;HJ^ z+~W_6z}8HK+3misE}jx-wO`Ax7&>{guUh10MuvtQpk5%&&;y|xpftl4C?85QTmka8 z0o6lkh8IvilxFw?<%8+XMt*8Mm~O6NoV=su{$|HEAr2?R ZBje_TX^$8uPhisJWM&0AR)E2Q0RT^tnDhVu diff --git a/bgfx/shaders/dx11/vs_ntsc_decode.bin b/bgfx/shaders/dx11/vs_ntsc_decode.bin index b52ec9d374d921dcfa249fe87cacc4a45fb4c81e..38720f9f4e7e5cd2b7c15e81c33d573154f901ec 100644 GIT binary patch delta 1175 zcmX@Tf$8)HrU{AyANQ%OPxBNtWm@<%X?b3g|3*U_Ce9E>1~Bm2oXBySakC=}Cllk3 z&4DZ*7$+yNux)naU}2HCXZk!0q^xw(zBONV|8<`kbzs#S=J^{o$MQ7tZ$1*;$Ua$L zg>`dAR5;^i*W`_I^=Uczi6zDgX_*zyrAeti`T5zU1sYJn_%a;@FjFBuCqD(wF3B(O zNi9pw0ci-%tV-47s^)?yORP|^RY*)K)`&0DtI)KDiB=*+D-ohqAklh=;wrdsSuWTR zAgKYui4{5uiIti_0->ZhIWZ>{sM%1@KtWd_wW7dC1LQtU1$~8hbhlY^Wu_?rO;J#^ zRR9^SsZgx|a-4#etpdoLkW_1hT8NrTG&PklH3%hDXiBP3loX|wlosUyjo+N%+|0=J z@BP2`ps1)e+3fB1kCAPjRmncvy2<_?L2QiP&x-ySZ(i>4hehC5-j&zO8m)h2t#ZoP zyy%kCS+3|pXlD9vyM$Ug*B52YDiK>1Lb;SZD#rZ*e; znemLK1G=Sy2FA%n&F3diU|O}=vBix`NH+i&8w?D&+L;i2rz2~vB4lW zF*A=LFF!98$kW}W_mPnSQ`6?BeF=;>GyCG$2~1q8O&Ay&fJXc=o}4~OiPHnfR0m@B x$&)7KGdfQGH>qCG3CMQ_VizEG17g?7jZEt|molAU1UlH1lbIFhP5}l71^^`oa}WRk delta 484 zcmX@Tf$8)HrU{Ay>lY#dmz4hnV2i?zHVH*u?n3w_>H(O7;#JJg!g_DW#&*ngu z4~&x&SlBi@avVeaQE)y znG<9Tc1+I%34=jyVrCvgUVdIGkf*y#?;|5n5m*9A)8?lW5*TrY-Qw6uOkAPH3=9oG zeanm{r%zGhbO$okf!J;Gq$&B6S*O+rIs$o4KA zHV3kNV4R%5!nWCwgM~%nuIckIkTPkm=hJ@wlknP=ACoVATItv3Se{1y%}1ge*(d9( zux`$X3TNExn!Hi2J}oCdvBX#*EwjS8G%3|5KR>&)Km#fmU#6n~W-7$z)m#u|i4_XA3W-U@8u4X%6`IyC(Mp79B|@|cBw7zqTm=^{%LN+( zBsD-du|h{7u~HLAAe0m*C+4IAH5=*~DCjDrRumX%fZV64psx^*?lx<#%rpg{DGG|V z3Lv936{;0Lj#JRGRREb2l4`9`3sF;vrlu062BD-1O-U7slA_d-(xN<|@tZT8n;E(O zz5n+f6cyDbo4wusF|z4jg+vSRZbb3 z7hQ6iyxCVRaz7(OLk>_ckY?zC&<#+UVGEQGr5UaO`G%m(1sEI{02`EWiU0rr delta 484 zcmX@Tf$8)HrU{Ayc?BOW&WGOlxoP42g=PmPUfpPD!^9N8xY>HzCC1H;ESyY?e>MlQ zd|;fMz{0lKk%NUrBCGmw7$XA%!=xLcffL>By;toOWM(`zdGqF2o<{!7DazrDo0Fs3 z*f+Z-Z~`N*7f%Va+OOqT44u5$S1ocgBSS+DP%n^X=z-7;P?}*2ln581CMk zJadAK!H(%)LB0Wl+{Da0hP?c|R3J}xm)=K4pdzpYlBUg1CnPZ947!N&50bR88K*|nZPMXcJWxG=oYqjb5EW?h?u{@3ZlUZW~HlK?w zWS^|B!n!#rDx7h%eey=R`m~(<#1dnLw9E?U(xg#Rsm#ANUF6$EksQvnwmAREyk6F5 z{VQvgQ^w{+mz*YV_En4A&&be_1Jnzo8G0ae1C(ai0_8(#hATk+A)tCF&F})shtdpx zpnNdB*~rg;XEZs`H93SbO`gECYO`aD5C{8qKVWPy$Zn46(Pa|iss?cwfN`wAz>okW zb0^R2lQFnp+6EE^gWSZ-Jchjdyi_1hcbDErMg~kxo1gY2Fybr#7ROFt;#z9Lz|a6R z;*as<^hrvb9zdo#5W7#FG%26aaq_=O^@2`7zB3TJ0I?eoyH0LoTEDrJ=?o*#^`@N6 MtUz}PFgP#(0Qr%1ivR!s delta 505 zcmX@Tf$8)HrU{Ay755*AJc)8!@!u@eN_?|S$VNjOCZ+(!&DPT{F>ZEb;bda`vpJCE z1LNcb7Piff94ssnS=Eoj7#SECJRbZ^IR8D?r$vqb)`FO&QJZ6V8u>TBNDOD3yd+9= z^E>H6_RaRm8|5}1a;azB+{zTj$o232zxN=m^2VFJ-TpDMy*iz6gQaG&zef<;nZhM| zml~`N*7f%Va+OOqT44u5$S1ocgBSS+DP%n^X=z-7;P?}*2lnNk?C!2%oP4O|>So6_Ar5vwRiGvY*3D6Ux=cbK zCJ+FfqQJnA0Afy_IYGw2Vmc!ehywz-iJ5r}dHH#%K(_8Ky^kP&g8`DJ%}*yJFyai* z#j%r^xcrS77#e{3mKjY>pQ6O+4rHnWvD@THQ}QRXPOTAi1oE7K*cpgjf!JkoBhzL^ dkIjM8J~D1jnD&Tq@&qPbPG(l1V+9x-7yxmOnJxeT diff --git a/bgfx/shaders/dx11/vs_post.bin b/bgfx/shaders/dx11/vs_post.bin new file mode 100644 index 0000000000000000000000000000000000000000..b4a48c5821f6960ac6b10d43dcb578a4b26c6828 GIT binary patch literal 41216 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 fjL%F1nFcZqWE#jckZIt()4;X|Fz??c--Y#b literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx11/vs_ratios.bin b/bgfx/shaders/dx11/vs_ratios.bin index 87a97456f61c7fb280eb58e0942b81951e6fe50c..680a1cf38d3282a0fad15c3261fbc794cea28adc 100644 GIT binary patch delta 1184 zcmX@Tf$8)HrU{Ayq1nH#m={0z$h=hi>%`Ux%QqU@FmZ-3GJt{C=0uLujGG-ADV2MdeDUDM}bAY~^a7EeDbzt3&*fu;tS2Y(zSz?8PtwLf_u||BEUWKMLOtcaqT8R*?0*Tf`6j#B8%W}bn z07(rHPOQ*TNUYQZ5(p*5$%#3sK+T4F1`4_gsTBoA8X)&+D(EZ3qr1(TD>F?2Xo`ZO ztpdnsO@(R&kmD4zY!yJ}grr(4)I!u$qN%BbsX-{ILQ_(OqNFIbq_ijxX#D03=VnH( zfA9aj2Sr7p$!2f2e~fHz@|E`4)=l>J2x4ROepd9yc=K|PKP&>j@~*sI)@c1JYn4;R z=0%sBCU5pti`>u1(2xVv3#1u(AanziX4nGdLurO9K>i`1dMM5C0?LQd41b_}FumEx zPlsnT9ndKqyl9MMnmmDN)n>;QAr5wS9bil_$Zn46(Pa|iss?cwfbpxqz>okWb0^R2 zlQB48`U8|^z#umdOOk4|17#JFWM*K0J zoIXj3(*wv<2V(chlP2XeI!^vKsb0_t$ae-}7a(>6V%N!yOzSt7GM!-ry55wNnHA_x I0R{&K0JCj%{{R30 delta 501 zcmX@Tf$8)HrU{AyIU5o-Eev7un=PZLbHMlE*^P!aOiTfco2{o^V%+S=!pX$=XLBIS z2gb<>ENq({IapXEvZ^14F)}bP1eTvZAeSQT-nX&$>&!Nlrp>WDjr^Nal*1V(E69j$ zekWbXzInIGM!C(0Ta{YV%?>$JXwDD$dw||Umnv(4|SZXHwdjzqaDO|F5 znbGFu9)DN_wq`2KZufn4@svQT{aSv-(8-&9)gm`DGBo4>^#W;z9thn4r5UzB`B0kS z3Xs1Is2)l)ynyndG{YY#A53pH^3&nL=5D9vP^Qg}Z9*LEn^l1t7+5z)_31JRftWx5 zbcO;0Ljs67dFBKe1C8lFKwblb+{Da0hP?c|R3J}xm)=LX1d^uBPbVZW;tb5iv6Gm% zyp0(c8h}PDGn$+}MTyfL$W#Ynx5<;H diff --git a/bgfx/shaders/dx11/vs_screen.bin b/bgfx/shaders/dx11/vs_screen.bin index 4b5f0d0f6f2c89c68e14d863b4700f60fc80817c..bcabfacc022bc4c81af788539dbc26a696f08bc7 100644 GIT binary patch delta 1184 zcmX@Tf$8)HrU{Ay30-e;c$PiTP5jJY{-d?fY@?wK6K4n`0~mO1PUJYvxY?0~lZo-i z=0KJYjFS^s*fu+Iu&_wnGkqQgQnve!&aQ_E6}~OsxrD40!`5t$_MC&1ntKh zqDxMbH~XqZ?q_6Z$N}mF(hNNix&cZvY=QEjG{Y4j{}50;lxBDVtwmkQ+R?$Z0n$bhM7^V7ZrMx42RaqI*pu7xHH3=Kdd{uobA zpQOa;0c5HJvHRpnlkyoIC;yvNFX#m1I|H!`5W4}f>*PkJ^_xqX&M*R9Z_3Hc3UsFc Hg98HqvSx4P delta 501 zcmX@Tf$8)HrU{AyepAn#zioa{%24Q%V`P@~&W(mPOiTfco2{o^V%+S=!pX$=XLBIS z2gb<>ENq({IapXEvZ^14F)}bPxD;%XIsEmVN2lAnv{|cS$~VXIH1cmwQ4VLEtRN%0 z`JHqj`{vy$8|5}1a;azB+{zTj$o232zxN=m(#D&;-TpDMvAIpZ!BR8X-y?|aOyQEf z%ZxTJ_xQsiur*U*cDwJZi>Cxy?bq@vhECq>s}{MLk)a_6s24~x^g!qaD9x}1%7@Yn zSAhI&K=n|X;RTcrr5XM}`Cxjpk)I9^Hg`KUhcaz;Y!l*OUz`loz`(jWs!x|m2*d;e zpfeO07!p9t$ulR&7-&q-1hK&&H!(AhAum5K70A=wrS}o!XD~q0wE5|T1V)^Jxj1$b z6PLF!149E)-!h}g=~I+A-GNMXAa5B~FmZ-3GJt{C=0uLujGG-ADV2MdeDJ=5o5AZ76#6HNH8c6lw9yKAVI&CIzumZy<_^S07NVvSO-&_C4MIs3nvyCMB}J(vrA2u_<2PqG zH#2hmd;jk}C^~XYHha7MV`MvU_G}>+BMh>eqk43igt)3f90p)KD=;u5 z0Lk3RGy7x=4wzOMu0(6PUQ>nlLal z0FC%#JUM-m5~l}{sSd>MlP68eXLOwWZ&JOW6Oiu=#4bSW2E?wD8=2N`E@e8y2z0$E NCo?P1odOIF3;;#ubU*+A delta 513 zcmX@Tf$8)HrU{AysXW_bHa3P9JGbB8di+Anxs8T4OiTfco2{o^V%+S=!pX$=XLBIS z2gb<>ENq({IapXEvZ^14F)}bP6k9p4>ZGplU(7z)=hTGa1Dj)c8u>S;D2FpnR*(_h z{7$-%eR5#3$ma7ZbLBQ4a;azB+{zTj$o232zxN>R;>Mf3-TpDM3C%ovgQaG&zef<; znZhM|ml~`N*7f%Va+OOqT44u5$S1ocgBSS+DP%n^X=z-7;P?}*2 zlnru+-|R7oV=^$?qIF+8i4wi8BI=~qQvPAWU2$P+vG`8@+Y%Str2tt@|=L!8Hinh*ky7f g(`H7G&4JTCGHy%nM1sEI{03xcEg#Z8m diff --git a/bgfx/shaders/dx9/fs_blit.bin b/bgfx/shaders/dx9/fs_blit.bin index 6fb1c1216e57ed3ab434df9ddb6a00f7b2b1fbb0..87431a56e71811b146f440d478fc3cc30f6a9e9d 100644 GIT binary patch delta 20 ccmcc1a+hVo0?rCX1_lKt28N1_E4MHL07N7P9smFU delta 20 ccmcc1a+hVo0?r&p1_lKt28NuCE4MHL07Fa$1^@s6 diff --git a/bgfx/shaders/dx9/fs_color.bin b/bgfx/shaders/dx9/fs_color.bin index 5a2d8fade3952a747036292e05ca79dc06ac3f85..a1c0521ad0e0351c5557b07b45f62e2db5664676 100644 GIT binary patch delta 86 zcmX@jeVTiN5Tj=UBLl-676yhUAiV}iHv{QCK)MA;p8?XHK>7}lZUxdWp!63Y-45h) Ture@o0BH#z-MKlMv48~t(g+Vn delta 86 zcmX@jeVTiN5Tj=aBLl-676yhgAiV}imjmfNK)M1*p8?XfK>7}lt_0FAp!63YT@B=O Ture^z0BH#zUAsA&v48~tzE}>= diff --git a/bgfx/shaders/dx9/fs_deconverge.bin b/bgfx/shaders/dx9/fs_deconverge.bin index 013c9d6654a94116c86b58fbaf8bb2be7c6404bb..c9628442dc417515b8991a172b3921555ee0167b 100644 GIT binary patch delta 60 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 Bu;l;% literal 7756 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 diff --git a/bgfx/shaders/dx9/fs_ntsc_encode.bin b/bgfx/shaders/dx9/fs_ntsc_encode.bin index 5aff8b1d48c4e8234b8e2aa25e26f80dc4f638cb..25f989f1d53961ce0042c042582a746801362011 100644 GIT binary patch literal 3249 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 MEd_&0&$l4@2gN4*c>n+a diff --git a/bgfx/shaders/dx9/fs_phosphor.bin b/bgfx/shaders/dx9/fs_phosphor.bin index 0166bd2acfa1589f347b1889698ae092830c4af6..7fbfb7d2433709cbec1e9a1bac86456281bb1b7a 100644 GIT binary patch delta 394 zcmXw#Jxc>Y6h+_L$(j)a8w<5DAqWQr=%9IY zg<^C>bNrIDPA3sgoUAsUiC9mZVtto7_uSG&P0Cvwi$Z)k{o@(Yd8H=6Z+sQvgw6XbIX z<+96g)~iwbZ#UsC;*s|IO|+*m|09*`!!+t5MPF?(pu@GQDLz#x22H%mA}Ld8tegmU Ov^bI1C?wM9VgCU^WJ2Ts delta 545 zcmY+Au}i~17{$L!qKS4WIynfX)Iqm^lOPDC&~Cc82?}YULQ86_QgEmjdtfVLgh9`z+@Q6?h-@qvx!Y^h$hkbUw8~%hN>fdm17e$g~nG&1B zo$>H?Z$Q^SKn}jZ()&T{;SlhE&h6-lvDZN?gT673SG*QlH#}SM zE{xZQ$AC{}uNCV=ZSfXUk!oBMvDVNkIkg*gC3&p8JjLNPT@v{eFKx0`QYDqxje~8j V$X=?FQk`0$+~H|2*NDqM{sVkvS>gZy diff --git a/bgfx/shaders/dx9/fs_post.bin b/bgfx/shaders/dx9/fs_post.bin new file mode 100644 index 0000000000000000000000000000000000000000..fb01e30626c2186203e2ad70f6dcbb920cfff9b8 GIT binary patch literal 5172 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 F{tLx;KS=-p literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/fs_ratios.bin b/bgfx/shaders/dx9/fs_ratios.bin index d9747d51c783f628449e445357c1658da4556924..375debeac2881345e662d60c3e5a56be479eaf6d 100644 GIT binary patch delta 61 zcmbQtIhk|9JHr}A28JEX3=FkE`UH@!1JXBubUl!M0i-n<7#My4=|&)*hXqJ)mS-$s F1^}953$FkG delta 61 zcmbQtIhk|9JHrA-28JEX3=D-p`UH?J0@62tbTN>A0i^XA7#My4=~5t{hXqJ)mS-$s F1^|*63vB=Z diff --git a/bgfx/shaders/dx9/fs_screen.bin b/bgfx/shaders/dx9/fs_screen.bin index bbdf62903b47960d6ed68a1a398d3446d1339010..6599df87a61cd47772b32929e29455043100f026 100644 GIT binary patch delta 20 ccmcc1a+hVo0?rCX1_lKt28N1_E4MHL07N7P9smFU delta 20 ccmcc1a+hVo0?r&p1_lKt28NuCE4MHL07Fa$1^@s6 diff --git a/bgfx/shaders/dx9/fs_tint.bin b/bgfx/shaders/dx9/fs_tint.bin index ac548cf447e657e04f5181be811f4207e79abf55..1fb18e25c33134381d51ca1843b0d71d764bab1a 100644 GIT binary patch delta 44 lcmZo*Z(yHrS+Satf#C@g0|SWu0Hs-&A$$=Kz41#A69Cy12`2ym delta 44 lcmZo*Z(yHrSuvlHf#C@g0|SWu0Hs-&A$$=Kz41#A69CjG22+5*P^NhX;V6wFjypZiAr>+#9yO{NR>8G!EO2{LQ;bPLED^;A{`9| z38T?qG>9~&P9_P9OOk5b5;gAnn`ww(2x79+?~>qG1ga2FjFx0?-=dfNoWy zoNz0X#Zd!GvaB#O%1kiR%su8Iv&yW2M|i{)^N#rlo*-|4r{D+k3p~cU8*Lz8r2bz+ zqs$OoxbL#fT9R!kG2_`#-7qXVT5P Yv84F$K~#;DeH>}+*Q@XmvEaP;0gPdWL;wH) delta 749 zcmY+CJ1hiI6o&tu*|CrD3W`N^3Y|z43WdlDk}V``x3VH$E8Z;4Vm%6lf=r_l#dfQZ zP$(42EtDdnA+oKGgvR*KI2-on{`WiQzvs@qb7!7vK5C9)wUz1Qbb4}iEjf{zUp0L8 z@!)(koKCK%CO3vw7H9oFz>i1(=C}Lpz9QNi?{5PzVsc>PG$yEKYK96>1p}CKs(t<2 z35zLQcTJg99x6|iIpu}&Mp+;?xy8M*sQe_e^n(?^4jECll3UEXe)C}r=tM%fq|A`J zEIcCj$ei+8{X6B0`tRgE>w*EN-FQenGR#m#XBG&_K_Y>tJTU zL_MP*LcAT&kL4$3>E3vS5w+Y*}Z* L%-SeA-GS2|**1oW diff --git a/bgfx/shaders/dx9/vs_defocus.bin b/bgfx/shaders/dx9/vs_defocus.bin new file mode 100644 index 0000000000000000000000000000000000000000..cdddfc9b28526a6e4c59bdd7a3cd9f3ce7d12e81 GIT binary patch literal 890 zcmb7CF>ljQ5WZ&{XaOk;V{vGpouhTY*}8<;#%28XeFVNligwM%U=z3oA07wL=>_&% zWf@hS+prBNuG0-D_-wn(m%;uFa6DY09LRtlz;A$kTli$)J75!FpX3i#2FzijZS)TO zH0Z}FQGZyyDnE>Smr4aDU=Ey0LYYI3&q%CB)8?3d7Jn5|rcT@g)E3UmcrP9jB+4#H7cGEVGE7TMX8oy(;F6p4m{ zBK!fp`3M)#-v>|_iGqR(QBa_mH@3s2W#s2KJNtHKv^&rGT}!Q*Wliv%^Hc zumq7su1V&qT$S(WVE^dhE)o4foQ){}t^s4f0zM*`gFE-!SWQM}ZtTaQJ2+KQ;0{K| zb2lCPL71d&Fu&{0QZG>HR3}rVC(b}koN<&!#5IV@@{>{XdBa~C{@(DfhRGy)iMrPt z-f38ZUn71W{0iIy$G)17?+taN6G>Sna9E&oY;Tw#199Iw(W&CzsL`>uwweXHEKA>; zhV!A;Ng%P$8snd?Y7r~ejUw-Gop82pVYYEN%d$NrK1Yde!;ir>a0xLy4q(!AthcH* z>OQyOTToo4D^T#>c2zHj{~6$XI6?)G13!S@0LQlQ%fUCmHo!5-KUfaT;p5uqE%=cd zCOXx}Q+xNxZM)m+_w0W4ns!IWCn^dPyDc5*w54pf9Z9S57ImIJ*x$kVKEQLtsd+8l z<2}F<;5*{k*#p=vCXg}=ANDTZ2P1RGlmFdHb`xcAHw&WHl6{m}h{ng=E{u&hG{ssE zP36}bvjF2dS~&adgP@}&`o`BnUS87@j9itbVBf6c2Is+g35|i-Dh&8#i7x&EjpMep literal 0 HcmV?d00001 diff --git a/bgfx/shaders/dx9/vs_gui.bin b/bgfx/shaders/dx9/vs_gui.bin index 17b1f20ded0dcc8f0abe564f170e95106fdcf13e..3a63611639e6739bab55dde501841e2a7c15cc1e 100644 GIT binary patch delta 44 ocmeyy_Kj`AUd0+l1_lmh1_lr<0i|_-bRCdy1Egy=-kZS$0MI-LmjD0& delta 44 ocmeyy_Kj`AUc~}N1_lmh1_lr<0i|_-bPJw*UYD delta 44 ocmeyx_KR)8LB#?_1_mBx1_lr<1EmdsbP?l!bvGz`&1S3{nQz7&^zCYd^PRswr>s`d${X+N17ngsG^a&h!)XDs%-5) zC=k(I1wS+lQw_ETYr-_x9|Y&X@*Sh?bPk3_+iKfJz3;e9qkhmD8LYzg1EV>*Z43gl z>jk}H-RTq$-N2>kl=BlsQB6(Il{k|4TH;vZ2Z^77FH!re#P1S+0FM#>CGkX}2C*E! z0(=E507Kv{VB2y!WSI@m^?V(g1gTgnZ_aWPq#$nb3Y?zfbx87@{;XLcn7Yznbd=cvgVoD0|arm6q;5~o)oHA@r{<;LtIRVbv7^9z-wI5@ME4^HeS998-vgsvH4 z*rpuv%qN2O$Jl>-In>}jje*D;b7t(Th+m6qix9-gYCI;ur(;;S9v{8R{V+p6CmHa0 ZKG#AGuEW<$VNJ*v`*ZZmtwpTT#_dWn2upkMrW)Xkd^r}zVSLhRT1`q)& zNhKs~c4rUYIXf_4ymdQYKi}8dO=`KqlTMmkbu_J`-KJLJC?R6Y4WeT1ZWef6nuvuR ztwN!&3h(ExrfqDs4`LsdfxleAMmUeKu^bsnHJs`viyRl%V&_PyTwG7%z>_MfZZ28Q ztX9a56-iFTXHdsP0vWgv*+C4<&_8rIzKX*-S|Ok{n&R|f3@^Y+1ar5C0o2mKDTC@m zxh>olJ9$Ngn_JWwndq=o=D72n)EUD`pl3dyAx5%Jl|X)0H_)r*WxxZpRI*C6Sjq4# zI2)RiaSw*(*ns=eq=DB(S{${|R#Pi8)GnBpAk^{rOU6Fp5#yu*neF)}Y55*9-$zyw z=5^sh_mT(@mGUIwW(e*6&l#sg3A3q2jIF1gnfOyROEUwli{g$;!p!?9OAlQ`fa$x`tVj literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/fs_distortion.bin b/bgfx/shaders/gles/fs_distortion.bin new file mode 100644 index 0000000000000000000000000000000000000000..b7afea3952d1c5b362ca9d3f93ac929a4404e7e6 GIT binary patch literal 3931 zcmbVPU5?^L5N4x1L}W9$LOUJd z9`03Yg-~9Q{-{19aKIB<;sM1f#cE3r>-kTo${cwn@ zWtpbCc$IIfZ|Lm%L%ckc$D}@#sXVzk#AR{Vt>R@-?$S~o{s^kuqNtzZ$D&;6)3=BC zn6GzfUFW;C6ojKP%{J+>&WoMVEsHwAgSbBLm7BkAdc9*(ooN{!?G{xxEML ze=PD9+a~#rd4B(MpRrBxOofZsFG-a?6q}-q`5j!Cf(Ug36@5r|by}vYSX@X@z2k9n znr(`tW~;oaixT_xehY}G;|L|LPuV^5EEokRHeg{OCO(QQ+bCo8mW@C{3RsaYDZmHp zemo&%`v6RI1X^$R0Ht_}D*7`zYzcM1L=aM7(yz=^Da|YcGc@2Shm?}}?6X^DZqAUb zzB&6{mgi_W&%k06-#wHd^nLaju1wr>bjyPfUFfL5!*wRo)eB2ERr)FuZPmDC;0eSGKhkH0ZSb)<8vK+(EMK zzrmC>48iIA2M7VHAjJWNcrJ$wb@zOf#QbdKXHbQ1nC^L=%tv?p#D2zmD$p{% zU8v}m5nojW`*GPvSw0mYktE>)MpvcMq&HAqv`@UTEF5qLpxoR5av^HluT?`@XVt!_ zf6KBetz%BS>>NNTQOX-(J{Y~?Od<+g!`9Y>KHU=*4P$)G6j^Mr(QOdfP~)xDpbYKR z_MlL&v1d}Xpi2eQwWSqhz94p6zy(NfVz#R9@H(f}rmc<9n*B^sBLL9qm?KV$uVuhE zZ7FSd@|DrhGGb`pBQC~(kFV!|k6~WjSY6nIl8rxW;CY03YQGbUojHAxkd{;D;@W2A zwxsPn%cpkIZlvH+nm18I$UZux2=2oGs!nMGt<5HQ%>xXN6d6k%t45wOhjjsM#~G*D z15t$Ve;<9=uf{TNJsBwyB-~_WvaA)o;S;9vy7`SJSd0T6h110lqM1%7Jc=YYz+xXT zF2>PhN`oWcyF@pH-X2?gTsm*);52j})xp_^tlamTJ8$;l;k0=gAF2dMZ_Td^ z^Z_d^1OmLuK&c9Q4GCOBnESh?i*pEys!OfZdDy>NWG1d(EN0`|_HOf$AoA9caBxnZ z6hsiEmo>w8VJl}z!0Oq*s5Dge))2%(!kP*q+lWbfv~MX#0;LJcFpJ<4A!ax71vX3z z%I(+~RG$F$i2e~HAj)wtDyrYAR?wu*F4@E_giQ|0&xnQ>HvS0Q{g1)D+S%YmkFSmw mPg-}j0Me!6P|JssM{s1;oA_gytmzjN1Z_RN?)oqNe(zuPt#sG` literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/fs_ntsc_decode.bin b/bgfx/shaders/gles/fs_ntsc_decode.bin index 3676644d74191c4f67e159557dcf6739d87ee24b..199ef94c3458613941e9de7ca82b98e8b58de17e 100644 GIT binary patch literal 6676 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 G9sCaj?W7t2 diff --git a/bgfx/shaders/gles/fs_ntsc_encode.bin b/bgfx/shaders/gles/fs_ntsc_encode.bin index 42a30179227f330cedd45b4e94123fd163962f68..57b92885914bf39ed9daac2e6f2fb125ad7f542c 100644 GIT binary patch delta 141 zcmca5aa)|zE!cyFvH8=qn)Gp;rL}nm{F!^SRWzo<+=v|*A-XN diff --git a/bgfx/shaders/gles/fs_phosphor.bin b/bgfx/shaders/gles/fs_phosphor.bin index 9ebdaa8f4cebccf21b31818b7e1eb6f9ff154f55..067b15813793f335f05c48f9bf7c52225894cae0 100644 GIT binary patch delta 257 zcmcc4(#<--gT;=Cfnj3i2Qg!XlH7u_#G-g3Yc2&idvY;j;N<&^V)dD63K|-v@db&+ z#U&X<`K9R@dKC(G3I=)xnwkpLKpk*B#tODD?S>$uY86s*ic_I#a`MXy6v|SQO<+n) zKuX|xP4p@%s}TCZP60~>gIs2!SB{V~)GJ5PiexR=%vz9adQQAsQDVAteolT7LaVVg JS1lJ80|0uJPbmNZ delta 196 zcmeBXz0NYhLy?P#fuSt1s4_DzT_GbgJ)=OOEH&9gp)5W*KPSJ)z?y5K&xgsY894=w zthp2vN^%Q;isOy+Dk`fc2QdbU!v)F}Y+I3PT9w5{`XJNsdt@FSFDz93Z6Nl*9ahE{)wD3$(bj*fPod4}LDM zU$2rSYoKb%BXz&MzxVai`@7#i|M1&Cf4mxfRng)Q?r44d?Ad7aZ1jCaqjXP;RnAyS z*HKc4_2(d$Rr!ipYcDFg%h@i>8NH9QED@65nbkd8m02#9zpd!DO76p)hVgD2ip4J~ zT1E*IFJMl(%{H5YmD*gf3ez}BnXL(4^fEle(#9)m`96;xwj~!+yFZ-n+O8mXZS&8l zESU@)0u!$^OtLDKfqhfa`*8IaU1hP#@g*48hU@GAS;dSd*;gdP_e+<25PN}`YzgRs)F5x$u4F&oFDu>zrz?BYZos@qkWhkqx6Anp)5NB zXR{!C5xsviKG~eXX36Rm_*xI`2RGv?jW$`H*v26ffvle07S4L4EY$T#G%z?IBM{jm zWaG0(grl`*tAX8K85_w%LWtZUAsgjSlogmC5*Co}k!tiqkBsS#9)WhRoEO8+IWK~J zbY7&|_v~Yj_3UBCnY}`E+w2`_wqKV-qZgsgvS>|`FiMHzjz5kGiL-<3#Sc}vt4a#J zWUu}b7VKBfFm%Q@bnnhcne3ox>6|aCXL3tU_}id zko&jF3`>7Q9Kd~Ll`}YGr+La#6|Bo8+sX$}g*x)(XhR&wks*3D`3X|+UGnJ@(Thj9 z=(^-1XmrH^1(-ttd|m+Yg8@Gp59YqbTNpgu-U?T*UlV?w;!48)fz6+BPkTH?)Fn49 z!`IsSLNn%7%o=`|yleuMhz>#?35yFRb8E=SvItk0Oc%JXnxTm6#N^O6d}RW-^p3SO z-Wh`}IuOM5e+%Log3x6{Mj8mELqW7G)K9oRJ)-~-_J0m3@J*4BJNiz^7DTEz7Y?$P zKHwk#AC80q*qJC;TqAb7PC7t(GYJhHbucq&1i?Uso5GFbHvFr?l||97+>hac2A@xf zv&q9%>8M<UFSiD;}JydFa3VF5C27`fj5nTE6g{$D#1;F+}fL=e)5eimJPzVLc1t{ug2~Cxw zJrhHOkQacN|Kqp6oWP}w8Uw5}aL~Z6QnDv~C3*RYV6eX{x}b21*p4E}el*39%%kRu zBcvyn#78wA7t9QP0Ow()*ZdBL@~G3or10mI6!AW9b%=((oG9dNtPTZ-LMt^mFTgH- zE&C8FXfK+?h7*pArZG62v8W81nMjS%NGEz836}hwGr!)qCbfr{zR$x4oU@_hl*rBa IaXcRV3-Uch-2eap literal 0 HcmV?d00001 diff --git a/bgfx/shaders/gles/vs_deconverge.bin b/bgfx/shaders/gles/vs_deconverge.bin index 0918a47ccb88b781ddf43f50d44fa8649257b11b..7f418b7ac9ca62e8517b38f20f5ce85898ac16f9 100644 GIT binary patch delta 140 zcmbQsbAo5WaZ%pV_~QK1qU6;0l+4^>CPoGZMuv=yw^f+fAi|qjm<1UPGBVRM3KYsx zlZ_Ngatq25i{eeJxfI}R1zQCTLp=k14VYn*16d^|%d@m_z*JA(#4-cHiDaFI;QV8i F2LOu-E}sAZ delta 106 zcmX@XGnZ$=aS@)<`1I1$;*$83%-muoMg|5(2D^=SRG3)7qMO;61sNxYvh?vIE7Pl} Tocx+)28LKS>og28O*VM|r_?3A diff --git a/bgfx/shaders/gles/vs_defocus.bin b/bgfx/shaders/gles/vs_defocus.bin new file mode 100644 index 0000000000000000000000000000000000000000..9dd618de8a02bb855e0ba2f88983419191ff7d0b GIT binary patch literal 419 zcmZvY!EVAZ42DyQQ=Y=df~KnNxS`!SA|Y|DLfaKjq^`0wv>;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQN;AA>0V(^Fw+6eG%it; z&;H`yoAq)MT)w{oA=}Jhc~}|xm;^!u;=-r0*5J0aCG4=;HQ>s84l2uOPbOZ-C-{|d zL!W4o>Zb)M7ud4PiA=!?r%aD^<@?>k{|~0%{N}dCcQX3ctd*U^n1bDe1!#pegj0Ev z;D2Iu!}cs$@bmp19S`t!&6tL96u&?c#nV5$>zR-FqOQNvH+GO?ZkXKUrF*q+l1_z`iW5~-yMFAg|3phdA(Dt1vK<8dj& z%}_t<^v|FJ*`LcpKAqDvl%9%%Ry^Q(27Mi;xX#v<^BX;>3IizVLcnDRhDmo6hDme~ zVFZRw01j{KGlxZ0q+{5Y{Qy(THjj8wBJWGIin78RpDo*35gUCBxa*{Aok2mh&YnJwd ScP86p&E3_p4kx&$l>7iNQ}>+! literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/fs_defocus.bin b/bgfx/shaders/glsl/fs_defocus.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd58019cf32e02010671ab4aeab8523ba73a8e00 GIT binary patch literal 1121 zcmbVL!A^rf5Z!7olIY#r92aeAyRm6Zb7 zUP+Bv_}+FI+j@E*B}>>!{{gnHuU1MAr&cK}FuajFUnw2nO_oHV(s5o;bUurh7@Y3X zyt|k|l@9h(Q2?q*FhI?qp9r*1p_!EuYzr(F_HamkBtMel4ek`N}9IHej3e(dv=Q^?8y55YpZgINju zl?fn@Y|Dmu12vfrjT1?vnE~Y^MPxD!P5?NBaJ9f*qsc*uwv6~H6Ig@CwUa4R0BPJ2 z7obs9C|!6HRXO{_o6D5Ji~wdE39uDV+kVM0O{@A?HoxV0oi#D1+3FlX67iNd!$=Uf znuIhKa4T9%3~F;j%ro=hd#1=@$AoVi#CfOLHE2*md$K)9(NpZ1P>HCNDxFVSGv*62 zb%0P%eFyCTUuivQJ9D&SzZ4YJfk?eh;k3M*=Hawyw6Vo^$gl5+sUe7XM07syGo8<& z7hQZVu|dgZnAOZY!q~Lmg*9_IeUYSwN)V5G=ca#wfvDP|b|P+sg`>MOX4B>nGg4g1nq#w{k1;@AU8UL|Rx zMi)LkYVX^#i+WVd10IFT%@oiqmkS<6vhQJ0PZ$^TXt5;fPvCiVW^yFMe_@4sEI%<% z1S`H4Yv6}BTRVefDS3k1PX`X3=QyY_c<>wsYmjw>y(`Z#r^ks~K6+c|BGCI`k1syw z(Hfkm?khI9_z;PHYq;DRcj4E zD2r4wjotn^Akn)XF=?Gw>DQhtf(Ee0z`-r~P$WPeKF$!n;RdIVq@?caM|p)jUYX|K zNa9iwWVtY0kG3U6N3=7b%+wHEa=>ghzQOY7i*mPh2Gu7ZHu8JMh-#AXMnzRuWeEy1 zP#Jsp3Sl?C@-U;ugiSpINB^TKd%G6A=+@Lo@nmq<3K*r77Ao^p&IoLW`(6B@O77`5 P41l(tN!R0t@p$wvF5olL literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/fs_ntsc_decode.bin b/bgfx/shaders/glsl/fs_ntsc_decode.bin index aab5144f7802636b18c82862b10c943608dc1186..877ddb808c5bca36b3882da9cfa8194d54ad02c4 100644 GIT binary patch literal 6318 zcmb_g&2HO95O#`Q>LM+A>UDdgY=;raC1u0Op=c1Kr=keZqNjyQQwa-6j3v>wV&v4v z=+pHT`UIVs-JRVPDLXW51dMi;GxN>=E?>WW^W~Gj|NHmp!B?%Cs;lX|t-g42aPS1z zfBNggR+XhsfEOBn{dKF><#eew^}>jF+Nx!`eO55i~X)uTQyr%mugk5KQzm= zc^ByQ9{Ob;{o7XkRc|)cN=+9{yWD8$j@ry->&j38$GT}(Wu-3a#ah4l&8vDgYuDA= z>Egq@T7kjv@1O4v4z8xFZM}RauBuXsD^)i0W;H%P^vEfYH`PtqG^-2PX_xh^SuHdJ zJF!DI&g{^wQ#%{Rxg9z?xwGRryR*0B^v?c{^E>-HLFnuU!PvK}gVNdcg5&nqIxy)g z5k?9^(bN}WF|C&(8Xevq3hnt{e=N&(q0)0p_*oM&Cj6lZk_o@PEvNHJTt;^$9f)&V0h9N+2f;Cg7-5lKAUwrV@t{Uf8B8aTt-1sKjC1EIvT$ zsf0lCLcA1^ftz+!fq$aVK_`BCj##(lCEIubf+DYO;~V%B&xz(LMpKW-&ykGBCn9)^ zMqMrBHLGQ!wRq_nNF2xci3lEAp!EfE14vsan)jJt=_7H(i-Mq7xAt-#^UITdPK=O7 zyi+t5wbiVZQKPUVN)BFVDLbXrF9jfDssIObcS1*rX1C9@@SVEcD;)FE6HcN?C*&_m zvSLrcnP^dzVw{5qM}?}uXF9u&$@fu8^jr@JT)QEQ6Pe^^*@?L8mv#-e53-5pr;f=n7FEzCZLFBA z+oOg*0sxGRjIrIy2sgvp3GupUyoJB61ls^X0y%t)Ar2m-$TrSXAn-S5lk(<2a>G7Cxapl3Pi4$~I7oce-VK1KO>< zS$u=l?{9C>&+gn2Z}kg7KGTqJOgT#2KPId)>EKC5Kx4v*D$q3%))N>`$b@r125#rv zAL-p=Vc!ZsLtcUeo67oK3L76Lb^7-hM5aIF~d)f+yyJ?knS17Puciv1yde znvEe*cQqc@mb|f%rq+f&C(<->EFnTAo z%oJfCM$=LQjG6dh5Ju|5>w0O6F3Y^L5-dzL^w$kC-(z4;8JX-2V9SB9siXU_;jF}m z#LQ0dJ>`zfgJDb4<^$OIFxZl2gAY6RVdr;xo0x~g4hM$R1A`|$jw!rj+hbdB$)P*X z$Q)w$UYVVa#4~sBK?!(mA0pw5jyVxcWPeEZX$QHcTxIXURhj|`;!+HZ3yn5EE`=W# zeYX{&Kb<5p506WD-j;OUra6w6P-k=6bC!}lgD9H}G#Tef6uc`~#J@oVv!M)g62L>O6&!gfVzeXnA4#&#G?I9Ul6V1<06r8ZC4>|BQ46&0B7wZn(0GXgc@YW>jQ2ms$%2f( zXf~W55-ybZencm`aeS83Ri;QGS1{WwxPq+R&-o1QrjztU!2gAu?DC>vckm{0G6uCt zJQ+g*p;|0`*6n}mlau&ni{coVk8%=UyR9UTuW|F;T)kdR-~EIi+R?$56Dz}he+Q+X I4i69h2h!rW3jhEB literal 6620 zcmb_h&2Aev5O#`Q>b5C*>yf>!Y-h7S)F09uiUdJ=Y6}-BdLq>ID%nEP+S1CF66Dmk z>f7`c`UIUBl0#CvvLnMmun~uxnQ#8Nn^)(rKY#T1fB!x{`eLmn>UuI;m!Ca4I(mfb zKmGObS`~#)fCII^{&KBW#blwHYHmb)y;h65Dc-4@>Y{n4#eTb1TQyylS87?VF6+h0 zoCSKdhkn&X|7NZJs+y);s>!@wFB&b~QS0e+RT?TFZOYB6dT(@ng-DlWxmcEkIr8{r zHJz?k<@scOIV+c7Km7gYyQ8D)$#PpQ-iqt8km6bu^{ied&yGEE24oOl)b;WLcGin( zS}*6CfqmMd8{f9**2k?4y5s4JDJ6mrFY0!oFH)Tdmj)Ip>Z zsY40tZLU&>5(yx|p+rKeQj0PZ=k@JBoq5v$Ua6H16k#>tro9=%>$14YJaNVNv9yaI_y+&>e+LkqMKAxm8| z)x1xvTe1{QwyF|>VuRbsdCG_PaAKZl#5+ZAQHRO`&r$~3{Y*>QX${>{0CJ_$95|Sp zliN}#oq3^!@AQ?u!m&C$;UtQ5Vi}<*D>nmgqDfJPfes!V7F~`$SAG{);3X2TXGo#M9dlf^dc%{0|C^dIyQ&uUlxRyox_FMNw6lmLOs<5Z^oaegLl z`=x!ujSMA0QJJBoqjHL67W8==Ehg&*ui^Iq03)NcwtdqGH@6Qf#GFmX@fQBHxosN; zZn7)E_y!MBV%zr}$86ib;~0(#JmLmEp~KL4lLbyhyGOwKppWS`1~&x}Rf|Sci;Hrj zFmsb8a-_Xtkys@;K4a z-Vsal!HFI2T19;olAzuBZ3wvt2ezD&IHTqmKB41MtOx)Ph>XUO12Bp=0KpnPj5p|Y ze|rnt7$Cb7)F@3Gcbdv*|8%ojMh=&>s&g7QEGkdXF%eegiHHc2fVGt{+zmXs4MV}T z)zdtu!t(l=bRuk(=wlQ`zIf}((thx*&1qgah}02HmGmV|r{IZrbjwO&Il%q!iT$Xk zS8N@Lx~-?Vj^|IafwiH_t2AmHWEwUR&rH+AKT&6>w8K9%FPt*0>4=o!9m*!_Ln)&+ z?Ud;OftJx^eqhUJ0yt%TYZ*=B2i6rfo}3yFdXa|n1M4!~sG7Rk${|PgH-D%U-7B3l zu!T|TQu7NQCL=$Ja<(cv8BIawCQm7xFhWKi zgb|zPz5M81UUE|v9T=r)umMI$zXtL;>QJw z{IDvZ(dNZPCSF`%acdPI^Wkv`uiuic-{4FAp~y3OV3eZ<_C&`dlIejq<3Ndgo8kKc zzrxA%cAGz8jA@^FuW=FohTEu#X-2nd+v`%#?moXXc&~U7{{|6(40E~0Tdb9qnCmDA zWty*H$Qr!2!-#+H(cpP3->1Re^y#hy#gTY+je<)uwRH$>&Y|@`o5?Y~6GiMfSe^>& z#u(n30VFTq`+GOKR&43OTQ-I}Vh55W>rEqxmnexBAPL|@X;MZwf$z0I>n{?>3k{8z zD3BMSK;QVj|D~^=kntCF!{L)-_%I31(v3Tb$9;O48Nf$19~^L^wfi}rzowo9DTE!cyFvH8%@p)eljp;w_`r(mFGpsA@)4O9R(z*xZ+rqd9lvsNKBr#Ka=2H9K_kStuA ziC#rz6-;Y9)J;gTs-JLl)*7a_C){Zh-t#Q*?J CYf!BK delta 155 zcmaFL(!nypLwYwO14CJ2QDtUcxKyj3$#68AVz2Dk`fc zn=uBamE;xx6~`Otl`GgPKsknb<ipGH?I@ diff --git a/bgfx/shaders/glsl/fs_post.bin b/bgfx/shaders/glsl/fs_post.bin new file mode 100644 index 0000000000000000000000000000000000000000..e5a745971d783b0ce4e3e62c012bff442bda72b4 GIT binary patch literal 4166 zcmbVPNpIUm6jq9&MU|z?B|Xk5AQhD%wZt}D=a8g9drATSfB{X7Y&Kj3E)tc*|D!** zZ{Dojs_=_bjUNLXe--^sY{C!h(j$?k*I>Z)#e_ zDHAVXPP)yv+mcn* z=n$BArD2-anGEbvO>e^J1C8=T<@ggAxC=M=0kTRMP4kTm3zC-%D|thVjMax)vfhgV zd<*r=4=NUT+d{2XQQyYfZC$eKFx@4rfd0YX<7x~WU>#7W1QU*=*o)hMcn@7 z)FLl{T(Kqs`uZqu19Pk zZ-8qfaGZ@;8)w^yJSioRIW8t3+2gm6+T$9;_E=ryjtL-w$C!xZF=oB*aS+)(Dk9ua zOM&jiThfO6kVFgn0PZ~AkTi@l;<(dKQz8)izOHt4MFGf?@H#Bn8-9-ILedtbN_TKH z=#mrEGr1zY`RFyruFlHRS%Hodc>W6q&WV|zpyj$H{w-Pc`236IASH282(a>`xPPmhK>7%Az*MQ~fmQVnn7eM@A!1u<3 zxxMgC15a01!qu~9g!fPkcsvEbe1$yikr!B@<%}DZfonZ|F&M)tS`D)^UNC_^LM9i6;2@M4S$e@LSYIrahRf?ds3TS`RO);wc#YBq zgMs%lIQN$;R{?JbdfgU)-Z;b&1XfH?2nEFzDC%bkN|mF%hC+mp7r>bRgbHMYYWP2w{j@~bXfxWB`fuN7ofg;J1Xo?|cj#?Owke(!oZ%%9%ECGH1{jkz& zf2KltRJSlG{DHEYNr*Re=U8aG%k4nkvZ^1r+F4mas{pq69qB`u+CPoGZMura?Zy#Y~g9tBP!o;YVnrx&{l3P%g zSQKw!&7}ZmE7&S%80s15YrqVde4j;P@>=GW$^V(z8BHcTu*~3q>6`qVWg3Fh!zvE| DZ4WI9 delta 97 zcmcb>y_$Q%aS@)<`1I1$;*$83%-muoMg|5(hBF)Q9ARVyi!NTq#5nmLb1yqo)#UTc Z5|f)*I#Bq^tZn?rrs!2vPTt5W4*=z5BrX5| diff --git a/bgfx/shaders/glsl/vs_defocus.bin b/bgfx/shaders/glsl/vs_defocus.bin new file mode 100644 index 0000000000000000000000000000000000000000..af6c9349f410fcc16eaa87e32ee35a9d92bb026b GIT binary patch literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/vs_distortion.bin b/bgfx/shaders/glsl/vs_distortion.bin new file mode 100644 index 0000000000000000000000000000000000000000..af6c9349f410fcc16eaa87e32ee35a9d92bb026b GIT binary patch literal 377 zcmZ9I%?g4*6h=pIHBWJu8X;!xqQmVFNLw=uk H=bXI(ZC875 literal 0 HcmV?d00001 diff --git a/bgfx/shaders/glsl/vs_post.bin b/bgfx/shaders/glsl/vs_post.bin new file mode 100644 index 0000000000000000000000000000000000000000..624be0f29f05c69c46c7943a0ed34363c7a46a76 GIT binary patch literal 684 zcma))%}#_c6ootEZ0yn}xb8p=0i4}rmL|G#5)-!#LK$m-5-5L8cn=@f%RkJ-#9eQ{ z-qUk#`~LR4d42kMxgs=Ux!}bikzbn?AuDp7v9xevR#xk_zQOv_@npfWoJrqLx$1zs zCd5%H5g(c2kaKqn4s&H76LUuw;1NMAQ=x>6&XA2r@zRwt@vtp-l1fC!PAwnRX4^L8 ze>BXAwWC=ie3^t0I%*43$O*KL$FP_CXQ9!Y6duZn2sE9ZD0D7W7^6LgHv$Z6dZ#a>dYqCy0VAkb|Wi%&`_*@ zRilL4J)kXJhZEA#wT)7jZ*5d%qfrA7QvR=oE=%2XO+KwA&>}G0k0$#}-QQ^g4d1Ay Gl>7oguHQ=l literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/fs_defocus.bin b/bgfx/shaders/metal/fs_defocus.bin new file mode 100644 index 0000000000000000000000000000000000000000..564475d1b228f19899a3c54c2fcccd931cb5cfb5 GIT binary patch literal 2475 zcmb`J&2G~`5XXbWg*?Take8;$v-rR0=&c4ziCjMG0(}z>`+bvD2!c(ERvPCwcTt`+gV?}n^qDgOGT8` zRdPWjt2;mUP@1a$@E$CUZr6pi*Z1(&Bt+ImX=#N?Z~X>M47U-_rFd%5YD3!^Ssk^V z(f}+~8JB66$Zm8LW7|ibHL|+)hVqGi>Rej>a8gCL9D6bvfMbssys0ao!<$^r4&^6| zF5poMc&vfP&j5A_7;R@K@aS;haToBU1$?f7&-VhKQgLO4C%a2LIh^>si+I{1Ms+`3 zd+6+Erus@|cQ^C&aAtJ6pizlYH$Sy7DlN(1{nWadWx;ng2jUU9-A?Yd0?|ki_iK=V zWlx_z)zo+d8Dggnu`NV2O2p?#QBptI*?0soVy7ChEk`tZ#QlO)y{&4#yGxFsNbHm( zDos|SW@`U1?P$rDFXg&fTHim&mbWaj0$9~(q076vnVDQUf!6wHvp$jQOkVb_9n;MY z#8!yv3~ILe5F{;a9&|`Xv(S<=jZKM~Cg6i4*TdCre#9t#HT;;R=h=|e3DUq(E^;*K U?74F8zM*KS7TaX8-^I literal 0 HcmV?d00001 diff --git a/bgfx/shaders/metal/fs_distortion.bin b/bgfx/shaders/metal/fs_distortion.bin new file mode 100644 index 0000000000000000000000000000000000000000..717075392c9901134a92ae1cd70faef269fa0e88 GIT binary patch literal 4349 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 T3RF|Vk1Z?B4t@(dK0f*%%{=nI literal 7457 zcmcIpOK;mo5O#r{eC)lz_EM0x!ieNj4KN zR#o*G%zhn~^R8>Ppo?_5;Ou-UUe)RO3lw(eu0P6RQPnG3erHMP7Sj|MV2%WW*Q)xNTSG(b-c9q+i&} zVzKC&{3KmnF7q1ps1>wn#2Ph^BAeBvxV2m@pymGI7f|CILY zjR@%s(irXP@>5!ikd9ym?3uKc=lUg(Uh#&#Hew!Oh}6qp^m(vjJ&Rug^n_dlQx8pgJi^<4{1&e33N7D!+_S*D1|)I z7K}nPi&i}*OP~M@plt$<&7M01U{E>-*&tDU7+3X%T`2bTipUYS!MnraRKCDQBg6y| zH*=IvdO_@H*A~I?e|z7C?T8Yz zT5^TVMD9(3XcmVvh@NfVoOE%b$9du=1H})pon;G~nlv2ZCNr?l$swJTec~YGVKR?L zY}+?!Gef#4tIt%`BS^O$TPf^RU+qTphVvoMsf*IC>vdV%bv+hESWA|0sG9I&R9nRq77ma)tpsZsYg$yR zn6|2!S3pNmlxO)`V1A6Bn88yv;r;0N8RI@RgQgwTaYNM%x(r#YBH}w0I`j`zka+Oj zv5qM+DO3oRcyTb6cD*H>s$nmDddFF*06<{fE@3(XOy*De3?2s&QMdaErGWxVVKGH6 zqB7iLnFVV=qmMle*60@d@eMpiN9rd|QIDu(_RBF{t9d4!z7SWB7S5jkjR^rK01Uv52ST7(^#M@(m@Tt*>a0#aQFWMWI>x!f63J?z)k#7f*Y2JZRUuF(^HBs*AoYg5VWp;OWHOiN&j z&yIRs#e=q@>e(x#`bi3@g?IpkR8V?_vb5m|spWV8g;cG2g|aWwt;GZAbBQgMjU4Es zCgTD0DXuFPeICXTH_sf>+$ctxlY6ruMXI1Cf^|MrtbS$rvdI;lyIU0j#43K_DvPAH zk(Y`I9i$L&MzI5u3Mi1$Ep@Z~k>Xa3R0aMpQpK_kQi#-hB1LlE)23Dn7ORXIM9LLC zJ4hkKjpChb%8}LgLrPnGig!bbWWFa-+^UhPBppVog4jViWj`6k zyCEg+hWB>5IL1?}frNofk>Q-;xcQsM97-~-;@SZ}yEk~M12*`X4Su#AJZ|0(yb5&( z{QTbFsixTA=QjBHcJR1)Kk#m$;j++}j^TC@cP@|A()y|`GFN&Y`Rq~OXQ2$YF7F~E zrvAyJs_quqq218vs3hUs>1a)p!d3FvUIH4pZ+=i=w7kT}mX~0#H9v6keqM5~2Ar-2 z)D6&Gzd!s$0gzgZO$KTh5AS_;EJU7tc6beAZm2xme)gRT;2<}+mj{kT#;{XpIbL3o zH|uxeUIh}m3TQ&Lw`*>5O_#WBc|vWuy&VHoy*laL0QVAk6zi_-neWiHdvyKrJ=MSa zN@9c;6dlO(J1#eg+ioYwy4dAwR5}Q)d%I`859r9BYFn#M8=338x#aXS@Q#W2Rjcz-tqLV}_sYXV>!V zy`US6NYB`qBx!>yNoI(W%m5?-a*72XSdC2Di~TIcYWt8_Gmrqy5XG9okXY9e_Peko zAxoT9tw}4qZ4#>3r)-Gv1vj>~^Mr1h6L^E`fK39l!44uG!E1 aSCQ&YkK diff --git a/bgfx/shaders/metal/fs_ntsc_encode.bin b/bgfx/shaders/metal/fs_ntsc_encode.bin index c41d301b78024a1bd49f3639b8d8fa690527c903..41224f621d444a44af05af4ab35cbb42f50597d8 100644 GIT binary patch delta 122 zcmew&^HZ9~E!cyFvH88+kk!#f$Sxi;`30Q!;alt+{HgxzdUf({oevCdP|x zp2C>R$c-ewnS=Q@2S-V6L0Mu^yxC*{o?;lseDVe!C6V~tlAQQbz0!CTJ-j)L0D7M* AbN~PV delta 230 zcmew<{Y8eyE!cyFvH8C7|*4UPERlAQQbz0&xC#Ny(TjH3L~^bEZU1v>=;Jp)Zmg=(NWxIrcgwlD(> zK?c++q~;W-Le-#{Zwiuz>oe7>sC2JFXa+kDNwypzWvEwgJ+_}r45_X(pN) z8fiKCi6tNgL?Ab_0w@U;gc+-&fF@$712MN$uQa|OvDm!0B%>(5G(AJFLQ_*g3nG`P a2lIlaCdeU0sU@XFc~JLQbJcQjF#rGu0a23x diff --git a/bgfx/shaders/metal/fs_post.bin b/bgfx/shaders/metal/fs_post.bin new file mode 100644 index 0000000000000000000000000000000000000000..6f15dc13093cdd4799ac815f3c1b43e5c1ba79ea GIT binary patch literal 4828 zcmbtY$#Ua15cMG^9rFb^xky{#kfOYm$8*Rsl{rk!!IjgLi$&9*&4i1Ji!Pe&M@>?5UPez@ z(O7#;)zt|fudiypifbM{=2cZ#6121CNh{FlkaW>YS3Jgb6z8j#*xG2bf?Ep;PL-w& zZwEVZnP(-R(9$Go3%=w-eQN8m&YoXdaQE1WL#BVv+Lqg{$)zYRs;;yFKgP))vKVYX zpl+&7)Mh!4it1?qS8k32)yR!xWJPUsYs<*0+6-_)d8(30p@0fr4hmV7nkw#(aaJ;C zqSB+H&7+Kc{@k?jGlvR#c$l-KD&gl)qbkEwhB6(U}tqYY+v5H2=)q#UHMCVqUv55e1jZF+slLc|w zoqYjEtT3rKqR*AciELcC96_to%8zlwv5%vLPThjF#cBwG!PjPa`;*p zQD(Fir9g9HZ-~6n-EiH<4$G9WSH|;(E3d6{DhJXcdZ+Fr-6}VeXyjGddot90(_^^y zc3Y)?5{7y70FD4BgHc$H0SSCSGK?bL5l3Jh5R{ApVU=+0>;*_*Bb+k-|0aDw(8mr* zZeRY)gGgxm5FvZ&vhxpV`>OWPr|*x4xk-I~a4KyQKS7ZMlDE-B8s;)V=oZ5jkeYL<%PrWnUD zSxu188Sog=kXvM1MV6tUxjCZ`mu!SCnYa)nIUjk7QP=l@73~S|DcU6jTK= zB+$bs19FW(iwg(#1j%w>KPDJF0Uw4bJP>D`PX%BZ6}$V61Z2+*C7&Jr&B5#|ik=86 zAHz#Z@q*4K&MV@gqV!%u;Ne*a*D&5+Vrx7W`QFaz$o>uG?Oc*OWAx3uLJ1!}P{4~b z7J9)lxVQ;P&=tu&Br2aGD63OzJx{zX=>qkEcNtv!Vc)(g1fg~r=OHr&VkkP)w=(Tk zh%|8pmta!|)9w`V-F%|~R`6F0K;-gyU$FYYrzB{o6KZjAG+J7p?dd{N@FZbTYwamv z!-p$by82rBPi1L7jQe?mT7OuSYIf?2QVc_aJ)xN$c~4NV%)t=GWqF6_su0g^tP>aj z{Qz29iCJl}v5~j`GiukQ2Z<0r@D9?YffLy@ALtHO1Ew0wsHnuKC8=>qq_;FF2y)kV zto$bpR2bIm(!PRlFxG@;&UN2l3xh4*OwyF}8y%*%AQHBI2?RIdwdz6ga(gkc73Y^0C8utVVmi!doR*WHSYo75l3P%gSQKw! z&7}ZmE7&S%80s15YsBZ4MORFLTUp-R(vyjEYKW+1PIzoU=WN#ISeFHAeXY-ApgDFLrEBN6- ztG995sb~(Yq1|y=bH1trwJlX;X*l*oE!R%Z()zG!h~th43CV?QXpI#W&S-;d\R z-8B?Sx~Dt~Gf4jeeUEiL&$cYN?(<9IcbDLTASme3YPJN{P0KWO9svyB~;J$9x!Vogi}-BRO`bi66i#!~dtxukVfxyf=zW%d8xu*C&>a!MDMN Zd}%}YIcGlm%4xjjXtfM1?(E_?`U^F(W+VUr literal 0 HcmV?d00001 diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index 9997f44d9fc..bf8170dfb73 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -133,6 +133,7 @@ function osdmodulesbuild() MAME_DIR .. "src/osd/modules/render/bgfx/entryuniformreader.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/inputpair.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/frameparameter.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/timeparameter.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/paramreader.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/paramuniform.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/shadermanager.cpp", diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp index 8a0d0f86107..b8dddb8b9fa 100644 --- a/src/osd/modules/lib/osdobj_common.cpp +++ b/src/osd/modules/lib/osdobj_common.cpp @@ -141,9 +141,10 @@ const options_entry osd_options::s_option_entries[] = { OSDOPTION_AUDIO_EFFECT "9", OSDOPTVAL_NONE, OPTION_STRING, "AudioUnit effect 9" }, #endif - { nullptr, nullptr, OPTION_HEADER, "BGFX POST-PROCESSING OPTIONS" }, - { OSDOPTION_BGFX_PATH, "bgfx", OPTION_STRING, "path to BGFX-related files" }, - { OSDOPTION_BGFX_SCREEN_CHAIN, "hlsl", OPTION_STRING, "screen chain JSON file to use" }, + { nullptr, nullptr, OPTION_HEADER, "BGFX POST-PROCESSING OPTIONS" }, + { OSDOPTION_BGFX_PATH, "bgfx", OPTION_STRING, "path to BGFX-related files" }, + { OSDOPTION_BGFX_SCREEN_CHAIN, "hlsl", OPTION_STRING, "screen chain JSON file to use" }, + { OSDOPTION_BGFX_SHADOW_MASK, "shadow-mask.png", OPTION_STRING, "shadow mask texture name" }, // End of list { nullptr } diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h index 652ae8d6cfc..573a658afa1 100644 --- a/src/osd/modules/lib/osdobj_common.h +++ b/src/osd/modules/lib/osdobj_common.h @@ -80,6 +80,7 @@ #define OSDOPTION_BGFX_PATH "bgfx_path" #define OSDOPTION_BGFX_SCREEN_CHAIN "screen_chain" +#define OSDOPTION_BGFX_SHADOW_MASK "bgfx_shadow_mask" //============================================================ // TYPE DEFINITIONS @@ -153,6 +154,7 @@ public: // BGFX specific options const char *bgfx_path() const { return value(OSDOPTION_BGFX_PATH); } const char *bgfx_screen_chain() const { return value(OSDOPTION_BGFX_SCREEN_CHAIN); } + const char *bgfx_shadow_mask() const { return value(OSDOPTION_BGFX_SHADOW_MASK); } private: static const options_entry s_option_entries[]; diff --git a/src/osd/modules/osdwindow.h b/src/osd/modules/osdwindow.h index 6081d47c010..3d46a273569 100644 --- a/src/osd/modules/osdwindow.h +++ b/src/osd/modules/osdwindow.h @@ -235,6 +235,7 @@ public: virtual void record() { }; virtual void toggle_fsfx() { }; virtual bool sliders_dirty() { return m_sliders_dirty; } + virtual bool multi_window_sliders() { return false; } static osd_renderer* make_for_type(int mode, osd_window *window, int extra_flags = FLAG_NONE); diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp index 4534dbbf9f9..721ee9147aa 100644 --- a/src/osd/modules/render/bgfx/chain.cpp +++ b/src/osd/modules/render/bgfx/chain.cpp @@ -8,6 +8,8 @@ #include "emu.h" +#include + #include "slider.h" #include "parameter.h" #include "entryuniform.h" @@ -23,6 +25,7 @@ bgfx_chain::bgfx_chain(std::string name, std::string author, std::vectorskip()) + if (!entry->skip()) { - m_entries[index]->submit(prim, current_view, textures, screen_width, screen_height, blend); + entry->submit(prim, current_view, textures, screen_width, screen_height, blend); current_view++; } } + + m_current_time = bx::getHPCounter(); + static int64_t last = m_current_time; + const int64_t frameTime = m_current_time - last; + last = m_current_time; + const double freq = double(bx::getHPFrequency()); + const double toMs = 1000.0 / freq; + const double frameTimeInSeconds = (double)frameTime / 1000000.0; + + for (bgfx_parameter* param : m_params) + { + param->tick(frameTimeInSeconds* toMs); + } } uint32_t bgfx_chain::applicable_passes() { int applicable_passes = 0; - for (int index = 0; index < m_entries.size(); index++) - { - if (!m_entries[index]->skip()) + for (bgfx_chain_entry* entry : m_entries) + { + if (!entry->skip()) { applicable_passes++; } diff --git a/src/osd/modules/render/bgfx/chain.h b/src/osd/modules/render/bgfx/chain.h index aa5187e3a74..6eb4db71f4c 100644 --- a/src/osd/modules/render/bgfx/chain.h +++ b/src/osd/modules/render/bgfx/chain.h @@ -43,6 +43,7 @@ private: std::vector m_entries; std::map m_slider_map; std::string m_output; + int64_t m_current_time; }; #endif // __DRAWBGFX_CHAIN__ diff --git a/src/osd/modules/render/bgfx/chainentry.cpp b/src/osd/modules/render/bgfx/chainentry.cpp index 9b7d1674fb6..ceec50f2706 100644 --- a/src/osd/modules/render/bgfx/chainentry.cpp +++ b/src/osd/modules/render/bgfx/chainentry.cpp @@ -58,8 +58,9 @@ void bgfx_chain_entry::submit(render_primitive* prim, int view, texture_manager& put_screen_buffer(prim, &buffer); bgfx::setVertexBuffer(&buffer); - bgfx_uniform* screen_rect = m_effect->uniform("u_screenrect"); - if (screen_rect != nullptr) + bgfx_uniform* inv_screen_dims = m_effect->uniform("u_inv_screen_dims"); + bgfx_uniform* screen_dims = m_effect->uniform("u_screen_dims"); + if (screen_dims != nullptr || inv_screen_dims != nullptr) { float values[2]; float width = screen_width; @@ -69,9 +70,18 @@ void bgfx_chain_entry::submit(render_primitive* prim, int view, texture_manager& width = float(textures.provider(m_inputs[0].texture())->width()); height = float(textures.provider(m_inputs[0].texture())->height()); } + values[0] = 1.0f / width; values[1] = 1.0f / height; - screen_rect->set(values, sizeof(float) * 2); + if (inv_screen_dims != nullptr) { + inv_screen_dims->set(values, sizeof(float) * 2); + } + + values[0] = width; + values[1] = height; + if (screen_dims != nullptr) { + screen_dims->set(values, sizeof(float) * 2); + } } bgfx_uniform* quad_dims = m_effect->uniform("u_quad_dims"); @@ -83,13 +93,16 @@ void bgfx_chain_entry::submit(render_primitive* prim, int view, texture_manager& quad_dims->set(values, sizeof(float) * 2); } - bgfx_uniform* guest_dims = m_effect->uniform("u_guest_dims"); - if (guest_dims != nullptr) + bgfx_uniform* source_dims = m_effect->uniform("u_source_dims"); + if (source_dims != nullptr) { float values[2]; - values[0] = 1.0f / float(prim->texture.width); - values[1] = 1.0f / float(prim->texture.height); - guest_dims->set(values, sizeof(float) * 2); + values[0] = float(prim->texture.width); + values[1] = float(prim->texture.height); + if (source_dims != nullptr) + { + source_dims->set(values, sizeof(float) * 2); + } } for (bgfx_entry_uniform* uniform : m_uniforms) { diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp index 5e4c9b2de9d..ce056b01900 100644 --- a/src/osd/modules/render/bgfx/chainentryreader.cpp +++ b/src/osd/modules/render/bgfx/chainentryreader.cpp @@ -9,6 +9,9 @@ #include #include "emu.h" +#include "rendutil.h" + +#include #include "chainentryreader.h" @@ -23,7 +26,7 @@ #include "suppressor.h" #include "suppressorreader.h" -bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, std::map& sliders, std::map& params) +bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, osd_options& options, texture_manager& textures, target_manager& targets, effect_manager& effects, std::map& sliders, std::map& params) { validate_parameters(value); @@ -64,6 +67,20 @@ bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, textur } } + if (value.HasMember("textures")) + { + assert(value["textures"].IsArray()); + const Value& texture_array = value["textures"]; + for (UINT32 i = 0; i < texture_array.Size(); i++) + { + char texture_name[2048]; + bitmap_argb32 bitmap; + emu_file file(options.bgfx_shadow_mask(), OPEN_FLAG_READ); + strcpy(texture_name, options.bgfx_shadow_mask()); + render_load_png(bitmap, file, nullptr, texture_name); + } + } + std::string output_name = value["output"].GetString(); if (output_name != std::string("backbuffer")) { diff --git a/src/osd/modules/render/bgfx/chainentryreader.h b/src/osd/modules/render/bgfx/chainentryreader.h index bb2501bf039..caf35f2e6bc 100644 --- a/src/osd/modules/render/bgfx/chainentryreader.h +++ b/src/osd/modules/render/bgfx/chainentryreader.h @@ -15,6 +15,7 @@ #include "statereader.h" +class osd_options; class bgfx_chain_entry; class texture_manager; class target_manager; @@ -25,7 +26,7 @@ class bgfx_parameter; class chain_entry_reader : public state_reader { public: - static bgfx_chain_entry* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, std::map& sliders, std::map& params); + static bgfx_chain_entry* read_from_value(const Value& value, osd_options& options, texture_manager& textures, target_manager& targets, effect_manager& effects, std::map& sliders, std::map& params); private: static void validate_parameters(const Value& value); diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp index cea272c0049..f8053e83e77 100644 --- a/src/osd/modules/render/bgfx/chainmanager.cpp +++ b/src/osd/modules/render/bgfx/chainmanager.cpp @@ -58,7 +58,7 @@ bgfx_chain* chain_manager::load_chain(std::string name, running_machine& machine Document document; document.Parse<0>(data); - bgfx_chain* chain = chain_reader::read_from_value(document, machine, window_index, m_textures, m_targets, m_effects, m_width, m_height); + bgfx_chain* chain = chain_reader::read_from_value(document, m_options, machine, window_index, m_textures, m_targets, m_effects, m_width, m_height); m_chains[name + std::to_string(window_index)] = chain; diff --git a/src/osd/modules/render/bgfx/chainreader.cpp b/src/osd/modules/render/bgfx/chainreader.cpp index 84868e19237..d3632174516 100644 --- a/src/osd/modules/render/bgfx/chainreader.cpp +++ b/src/osd/modules/render/bgfx/chainreader.cpp @@ -28,7 +28,7 @@ const chain_reader::string_to_enum chain_reader::STYLE_NAMES[chain_reader::STYLE { "custom", TARGET_STYLE_CUSTOM } }; -bgfx_chain* chain_reader::read_from_value(const Value& value, running_machine& machine, uint32_t window_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height) +bgfx_chain* chain_reader::read_from_value(const Value& value, osd_options& options, running_machine& machine, uint32_t window_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height) { validate_parameters(value); @@ -42,7 +42,7 @@ bgfx_chain* chain_reader::read_from_value(const Value& value, running_machine& m const Value& slider_array = value["sliders"]; for (UINT32 i = 0; i < slider_array.Size(); i++) { - std::vector expanded_sliders = slider_reader::read_from_value(slider_array[i], machine); + std::vector expanded_sliders = slider_reader::read_from_value(slider_array[i], machine, window_index); for (bgfx_slider* slider : expanded_sliders) { sliders.push_back(slider); @@ -129,7 +129,7 @@ bgfx_chain* chain_reader::read_from_value(const Value& value, running_machine& m const Value& entry_array = value["passes"]; for (UINT32 i = 0; i < entry_array.Size(); i++) { - entries.push_back(chain_entry_reader::read_from_value(entry_array[i], textures, targets, effects, slider_map, param_map)); + entries.push_back(chain_entry_reader::read_from_value(entry_array[i], options, textures, targets, effects, slider_map, param_map)); } } diff --git a/src/osd/modules/render/bgfx/chainreader.h b/src/osd/modules/render/bgfx/chainreader.h index 76c696868cb..c7db0c0e07d 100644 --- a/src/osd/modules/render/bgfx/chainreader.h +++ b/src/osd/modules/render/bgfx/chainreader.h @@ -21,7 +21,7 @@ class effect_manager; class chain_reader : public state_reader { public: - static bgfx_chain* read_from_value(const Value& value, running_machine& machine, uint32_t window_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height); + static bgfx_chain* read_from_value(const Value& value, osd_options& options, running_machine& machine, uint32_t window_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height); private: static void validate_parameters(const Value& value); diff --git a/src/osd/modules/render/bgfx/frameparameter.cpp b/src/osd/modules/render/bgfx/frameparameter.cpp index 9febb7ae128..a354664cfce 100644 --- a/src/osd/modules/render/bgfx/frameparameter.cpp +++ b/src/osd/modules/render/bgfx/frameparameter.cpp @@ -10,6 +10,7 @@ bgfx_frame_parameter::bgfx_frame_parameter(std::string name, parameter_type type, uint32_t period) : bgfx_parameter(name, type) + , m_current_frame(0) , m_period(period) { } @@ -19,7 +20,7 @@ float bgfx_frame_parameter::value() return float(m_current_frame); } -void bgfx_frame_parameter::tick(float /*delta*/) +void bgfx_frame_parameter::tick(double /*delta*/) { m_current_frame++; m_current_frame %= m_period; diff --git a/src/osd/modules/render/bgfx/frameparameter.h b/src/osd/modules/render/bgfx/frameparameter.h index f1ec9d64abc..022a6f2065b 100644 --- a/src/osd/modules/render/bgfx/frameparameter.h +++ b/src/osd/modules/render/bgfx/frameparameter.h @@ -1,3 +1,4 @@ + // license:BSD-3-Clause // copyright-holders:Ryan Holtz //============================================================ @@ -24,7 +25,7 @@ public: virtual ~bgfx_frame_parameter() { } virtual float value() override; - virtual void tick(float delta) override; + virtual void tick(double delta) override; private: uint32_t m_current_frame; diff --git a/src/osd/modules/render/bgfx/fs_defocus.sc b/src/osd/modules/render/bgfx/fs_defocus.sc new file mode 100644 index 00000000000..acd0a715557 --- /dev/null +++ b/src/osd/modules/render/bgfx/fs_defocus.sc @@ -0,0 +1,52 @@ +$input v_color0, v_texcoord0 + +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz,ImJezze +//----------------------------------------------------------------------------- +// Defocus Effect +//----------------------------------------------------------------------------- + +#include "../../../../../3rdparty/bgfx/examples/common/common.sh" + +uniform vec4 u_screenrect; + +uniform vec4 u_defocus; + +uniform vec4 u_swap_xy; +uniform vec4 u_screen_dims; + +SAMPLER2D(DiffuseSampler, 0); + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +void main() +{ + const vec2 Coord1Offset = vec2( 0.75, 0.50); + const vec2 Coord2Offset = vec2( 0.25, 1.00); + const vec2 Coord3Offset = vec2(-0.50, 0.75); + const vec2 Coord4Offset = vec2(-1.00, 0.25); + const vec2 Coord5Offset = vec2(-0.75, -0.50); + const vec2 Coord6Offset = vec2(-0.25, -1.00); + const vec2 Coord7Offset = vec2( 0.50, -0.75); + const vec2 Coord8Offset = vec2( 1.00, -0.25); + + vec2 QuadRatio = vec2(1.0, (u_swap_xy.x > 0.0) ? u_screen_dims.y / u_screen_dims.x : u_screen_dims.x / u_screen_dims.y); + + vec2 DefocusTexelDims = u_defocus.xy / u_screen_dims.xy; + + vec4 d0 = texture2D(DiffuseSampler, v_texcoord0); + vec4 d1 = texture2D(DiffuseSampler, v_texcoord0 + Coord1Offset * DefocusTexelDims); + vec4 d2 = texture2D(DiffuseSampler, v_texcoord0 + Coord2Offset * DefocusTexelDims); + vec4 d3 = texture2D(DiffuseSampler, v_texcoord0 + Coord3Offset * DefocusTexelDims); + vec4 d4 = texture2D(DiffuseSampler, v_texcoord0 + Coord4Offset * DefocusTexelDims); + vec4 d5 = texture2D(DiffuseSampler, v_texcoord0 + Coord5Offset * DefocusTexelDims); + vec4 d6 = texture2D(DiffuseSampler, v_texcoord0 + Coord6Offset * DefocusTexelDims); + vec4 d7 = texture2D(DiffuseSampler, v_texcoord0 + Coord7Offset * DefocusTexelDims); + vec4 d8 = texture2D(DiffuseSampler, v_texcoord0 + Coord8Offset * DefocusTexelDims); + + vec4 blurred = (d0 + d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8) / 9.0; + + gl_FragColor = vec4(blurred.xyz, 1.0) * v_color0; +} diff --git a/src/osd/modules/render/bgfx/fs_distortion.sc b/src/osd/modules/render/bgfx/fs_distortion.sc new file mode 100644 index 00000000000..3875c785e8d --- /dev/null +++ b/src/osd/modules/render/bgfx/fs_distortion.sc @@ -0,0 +1,239 @@ +$input v_color0, v_texcoord0 + +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz,ImJezze +//----------------------------------------------------------------------------- +// Defocus Effect +//----------------------------------------------------------------------------- + +#include "../../../../../3rdparty/bgfx/examples/common/common.sh" + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +SAMPLER2D(DiffuseSampler, 0); + +//----------------------------------------------------------------------------- +// Uniforms +//----------------------------------------------------------------------------- + +uniform vec4 u_screen_dims; + +uniform vec4 u_curvature; +uniform vec4 u_round_corner; +uniform vec4 u_smooth_border; +uniform vec4 u_vignetting; +uniform vec4 u_reflection; + +uniform vec4 u_rotation_type; // TODO + +#define CurvatureAmount u_curvature.x +#define RoundCornerAmount u_round_corner.x +#define SmoothBorderAmount u_smooth_border.x +#define VignettingAmount u_vignetting.x +#define ReflectionAmount u_reflection.x + +#define RotationType u_rotation_type.x // TODO + +//----------------------------------------------------------------------------- +// Functions +//----------------------------------------------------------------------------- + +// Holy fuck the number of functions... + +// www.stackoverflow.com/questions/5149544/can-i-generate-a-random-number-inside-a-pixel-shader/ +float rand(vec2 seed) +{ + // irrationals for pseudo randomness + vec2 i = vec2(23.140692, 2.6651442); // e^pi (Gelfond constant), 2^sqrt(2) (Gelfond-Schneider constant) + + return fract(cos(dot(seed, i)) * 123456.0); +} + +// www.dinodini.wordpress.com/2010/04/05/normalized-tunable-sigmoid-functions/ +float normalizedSigmoid(float n, float k) +{ + // valid for n and k in range of -1.0 and 1.0 + return (n - n * k) / (k - abs(n) * 2.0 * k + 1.0); +} + +// www.iquilezles.org/www/articles/distfunctions/distfunctions.htm +float roundBox(vec2 p, vec2 b, float r) +{ + return length(max(abs(p) - b + r, 0.0)) - r; +} + +vec2 GetRatioCorrection() +{ + float ScreenQuadRatio = 1.0; + + return ScreenQuadRatio > 1.0f + ? vec2(1.0, 1.0f / ScreenQuadRatio) + : vec2(ScreenQuadRatio, 1.0); +} + +float GetNoiseFactor(float n, float random) +{ + // smaller n become more noisy + return 1.0 + random * max(0.0, 0.25 * pow(2.7182817, -8.0 * n)); +} + +float GetVignetteFactor(vec2 coord, float amount) +{ + vec2 VignetteCoord = coord; + + float VignetteLength = length(VignetteCoord); + float VignetteBlur = (amount * 0.75) + 0.25; + + // 0.5 full screen fitting circle + float VignetteRadius = 1.0 - (amount * 0.25); + float Vignette = smoothstep(VignetteRadius, VignetteRadius - VignetteBlur, VignetteLength); + + return saturate(Vignette); +} + +float GetSpotAddend(vec2 coord, float amount) +{ + vec2 RatioCorrection = GetRatioCorrection(); + + // normalized screen quad ratio + vec2 QuadRatio = vec2(1.0, u_screen_dims.y / u_screen_dims.x); + + // normalized screen quad ratio + // upper right quadrant + vec2 spotOffset = vec2(-0.25, 0.25); // 0 degrees + if (RotationType == 1.0) + spotOffset = vec2(-0.25, -0.25); // 90 degrees + if (RotationType == 2.0) + spotOffset = vec2(0.25, -0.25); // 180 degrees + if (RotationType == 3.0) + spotOffset = vec2(0.25, 0.25); // 270 degrees + + vec2 SpotCoord = (coord + spotOffset * RatioCorrection) / RatioCorrection; + + float SpotBlur = amount; + + // 0.5 full screen fitting circle + float SpotRadius = amount * 0.75; + float Spot = smoothstep(SpotRadius, SpotRadius - SpotBlur, length(SpotCoord)); + + float SigmoidSpot = amount * normalizedSigmoid(Spot, 0.75); + + // increase strength by 100% + SigmoidSpot = SigmoidSpot * 2.0; + + return saturate(SigmoidSpot); +} + +float GetRoundCornerFactor(vec2 coord, float radiusAmount, float smoothAmount) +{ + vec2 RatioCorrection = GetRatioCorrection(); + + // reduce smooth amount down to radius amount + smoothAmount = min(smoothAmount, radiusAmount); + + float range = min(u_screen_dims.x, u_screen_dims.y) * 0.5; + float radius = range * max(radiusAmount, 0.0025); + float smooth_val = 1.0 / (range * max(smoothAmount, 0.0025)); + + // compute box + float box = roundBox(u_screen_dims.xy * (coord * 2.0f), u_screen_dims.xy * RatioCorrection, radius); + + // apply smooth + box *= smooth_val; + box += 1.0 - pow(smooth_val * 0.5, 0.5); + + float border = smoothstep(1.0, 0.0, box); + + return saturate(border); +} + +// www.francois-tarlier.com/blog/cubic-lens-distortion-shader/ +vec2 GetDistortedCoords(vec2 centerCoord, float amount) +{ + // lens distortion coefficient + float k = amount; + + // cubic distortion value + float kcube = amount * 2.0; + + // compute cubic distortion factor + float r2 = centerCoord.x * centerCoord.x + centerCoord.y * centerCoord.y; + float f = kcube == 0.0 ? 1.0 + r2 * k : 1.0 + r2 * (k + kcube * sqrt(r2)); + + // fit screen bounds + f /= 1.0 + amount * 0.5; + + // apply cubic distortion factor + centerCoord *= f; + + return centerCoord; +} + +vec2 GetCoords(vec2 coord, float distortionAmount) +{ + vec2 RatioCorrection = GetRatioCorrection(); + + // center coordinates + coord -= 0.5; + + // apply ratio difference between screen and quad + coord /= RatioCorrection; + + // distort coordinates + coord = GetDistortedCoords(coord, distortionAmount); + + // revert ratio difference between screen and quad + coord *= RatioCorrection; + + // un-center coordinates + coord += 0.5; + + return coord; +} + +//----------------------------------------------------------------------------- +// Distortion Pixel Shader +//----------------------------------------------------------------------------- + +void main() +{ + // Screen Curvature + vec2 BaseCoord = GetCoords(v_texcoord0, CurvatureAmount * 0.25); // reduced amount + + vec2 BaseCoordCentered = BaseCoord; + BaseCoordCentered -= 0.5; + + // Color + vec4 BaseColor = texture2D(DiffuseSampler, BaseCoord); + BaseColor.a = 1.0; + + // Clamp + if (BaseCoord.x > 1.0 || BaseCoord.y > 1.0 || BaseCoord.x < 0.0 || BaseCoord.y < 0.0) + BaseColor.rgb = vec3(0.0, 0.0, 0.0); + + // Vignetting Simulation + vec2 VignetteCoord = BaseCoordCentered; + + float VignetteFactor = GetVignetteFactor(VignetteCoord, VignettingAmount); + BaseColor.rgb *= VignetteFactor; + + // Light Reflection Simulation + vec3 LightColor = vec3(1.0, 0.90, 0.80); // color temperature 5.000 Kelvin + + vec2 SpotCoord = BaseCoordCentered; + vec2 NoiseCoord = BaseCoordCentered; + + float SpotAddend = GetSpotAddend(SpotCoord, ReflectionAmount); + float NoiseFactor = GetNoiseFactor(SpotAddend, rand(NoiseCoord)); + BaseColor.rgb += SpotAddend * NoiseFactor * LightColor; + + // Round Corners Simulation + vec2 RoundCornerCoord = BaseCoordCentered; + + float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerAmount, SmoothBorderAmount); + BaseColor.rgb *= roundCornerFactor; + + gl_FragColor = BaseColor; +} diff --git a/src/osd/modules/render/bgfx/fs_ntsc_decode.sc b/src/osd/modules/render/bgfx/fs_ntsc_decode.sc index 8479377817c..41807a1cf6f 100644 --- a/src/osd/modules/render/bgfx/fs_ntsc_decode.sc +++ b/src/osd/modules/render/bgfx/fs_ntsc_decode.sc @@ -22,8 +22,7 @@ uniform vec4 u_q_freq_response; uniform vec4 u_jitter_amount; uniform vec4 u_jitter_offset; -uniform vec4 u_texsize; -uniform vec4 u_screenrect; +uniform vec4 u_source_dims; SAMPLER2D(DiffuseSampler, 0); @@ -35,16 +34,13 @@ void main() { vec4 BaseTexel = texture2D(DiffuseSampler, v_texcoord0.xy); - vec2 SourceTexelDims = u_texsize.xy; - vec2 SourceRes = (1.0 / u_texsize.xy) * u_screenrect.xy; - vec4 zero = vec4(0.0, 0.0, 0.0, 0.0); vec4 quarter = vec4(0.25, 0.25, 0.25, 0.25); vec4 onehalf = vec4(0.5, 0.5, 0.5, 0.5); vec4 one = vec4(1.0, 1.0, 1.0, 1.0); vec4 two = vec4(2.0, 2.0, 2.0, 2.0); vec4 four = vec4(4.0, 4.0, 4.0, 4.0); - vec4 TimePerSample = u_scan_time.xxxx / (SourceRes.xxxx * four); + vec4 TimePerSample = u_scan_time.xxxx / (u_source_dims.xxxx * four); vec4 Fc_y1 = (u_cc_value.xxxx - u_notch_width.xxxx * onehalf) * TimePerSample; vec4 Fc_y2 = (u_cc_value.xxxx + u_notch_width.xxxx * onehalf) * TimePerSample; @@ -61,27 +57,23 @@ void main() vec4 WoPI = W / PI; vec4 HOffset = (u_b_value.xxxx + u_jitter_amount.xxxx * u_jitter_offset.xxxx) / WoPI; - vec4 VScale = (u_a_value.xxxx * SourceRes.yyyy) / WoPI; + vec4 VScale = (u_a_value.xxxx * u_source_dims.yyyy) / WoPI; vec4 YAccum = zero; vec4 IAccum = zero; vec4 QAccum = zero; - vec4 Cy = v_texcoord0.yyyy; - vec4 VPosition = vec4(Cy / u_screenrect.y); - for (int index = 0; index < 64; index = index + 4) { float n = float(index); vec4 n4 = vec4(n, n, n, n) + vec4(0.0, 1.0, 2.0, 3.0); - vec4 Cx = v_texcoord0.xxxx + SourceTexelDims.xxxx * (n4 * quarter); - vec4 HPosition = Cx / u_screenrect.xxxx; + vec4 Cx = v_texcoord0.xxxx + u_source_dims.xxxx * (n4 * quarter); // theory: What if we put white in the input of the NTSC decode shader? - vec4 C = texture2D(DiffuseSampler, vec2(Cx.x, Cy.x)); + vec4 C = texture2D(DiffuseSampler, vec2(Cx.x, v_texcoord0.y)); - vec4 T = HPosition + HOffset + VPosition * VScale; + vec4 T = Cx + HOffset + v_texcoord0.yyyy * VScale; vec4 WT = W * T + u_o_value.xxxx; vec4 SincKernel = vec4(0.54, 0.54, 0.54, 0.54) + vec4(0.46, 0.46, 0.46, 0.46) * cos((PI2 / 1.0) * n4); diff --git a/src/osd/modules/render/bgfx/fs_ntsc_encode.sc b/src/osd/modules/render/bgfx/fs_ntsc_encode.sc index 5812b01a8a0..2a16d225183 100644 --- a/src/osd/modules/render/bgfx/fs_ntsc_encode.sc +++ b/src/osd/modules/render/bgfx/fs_ntsc_encode.sc @@ -18,8 +18,7 @@ uniform vec4 u_scan_time; uniform vec4 u_jitter_amount; uniform vec4 u_jitter_offset; -uniform vec4 u_texsize; -uniform vec4 u_screenrect; +uniform vec4 u_source_dims; SAMPLER2D(DiffuseSampler, 0); @@ -29,9 +28,7 @@ SAMPLER2D(DiffuseSampler, 0); void main() { - vec2 SourceRes = (1.0 / u_texsize.xy) * u_screenrect.xy; - - vec2 PValueSourceTexel = vec2(u_p_value.x, 0.0) * u_texsize.xy; + vec2 PValueSourceTexel = vec2(u_p_value.x, 0.0) * u_source_dims.xy; vec2 C0 = v_texcoord0 + PValueSourceTexel * vec2(0.0, 0.0); vec2 C1 = v_texcoord0 + PValueSourceTexel * vec2(0.25, 0.0); @@ -44,9 +41,6 @@ void main() vec4 Texel2 = texture2D(DiffuseSampler, C2); vec4 Texel3 = texture2D(DiffuseSampler, C3); - vec4 HPosition = Cx / u_screenrect.xxxx; - vec4 VPosition = Cy / u_screenrect.yyyy; - const vec4 YDot = vec4(0.299, 0.587, 0.114, 0.0); const vec4 IDot = vec4(0.595716, -0.274453, -0.321263, 0.0); const vec4 QDot = vec4(0.211456, -0.522591, 0.311135, 0.0); @@ -60,9 +54,9 @@ void main() vec4 WoPI = W / PI; vec4 HOffset = (u_b_value.xxxx + u_jitter_amount.xxxx * u_jitter_offset.xxxx) / WoPI; - vec4 VScale = (u_a_value.xxxx * SourceRes.yyyy) / WoPI; + vec4 VScale = (u_a_value.xxxx * u_source_dims.yyyy) / WoPI; - vec4 T = HPosition + HOffset + VPosition * VScale; + vec4 T = Cx + HOffset + Cy * VScale; vec4 TW = T * W; vec4 output_rgb = Y + I * cos(TW) + Q * sin(TW); diff --git a/src/osd/modules/render/bgfx/fs_phosphor.sc b/src/osd/modules/render/bgfx/fs_phosphor.sc index 2df6b3f827d..90c69746822 100644 --- a/src/osd/modules/render/bgfx/fs_phosphor.sc +++ b/src/osd/modules/render/bgfx/fs_phosphor.sc @@ -13,8 +13,10 @@ SAMPLER2D(s_prev, 1); void main() { - vec4 curr = texture2D(s_tex, v_texcoord0); - vec4 prev = texture2D(s_prev, v_texcoord0); - vec4 phosphored = vec4(max(curr.r, prev.r * u_phosphor.r), max(curr.g, prev.g * u_phosphor.g), max(curr.b, prev.b * u_phosphor.b), curr.a); - gl_FragColor = mix(phosphored, curr, u_passthrough.x) * v_color0; + vec4 curr = texture2D(s_tex, v_texcoord0); + vec3 prev = texture2D(s_prev, v_texcoord0).rgb * u_phosphor.rgb; + + vec3 maxed = max(curr.rgb, prev); + + gl_FragColor = u_passthrough.x > 0.0 ? curr : vec4(maxed, curr.a); } diff --git a/src/osd/modules/render/bgfx/fs_post.sc b/src/osd/modules/render/bgfx/fs_post.sc new file mode 100644 index 00000000000..0072ecfc525 --- /dev/null +++ b/src/osd/modules/render/bgfx/fs_post.sc @@ -0,0 +1,156 @@ +$input v_color0, v_texcoord0, v_texcoord1 + +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz,ImJezze +//----------------------------------------------------------------------------- +// Defocus Effect +//----------------------------------------------------------------------------- + +#include "../../../../../3rdparty/bgfx/examples/common/common.sh" + +uniform vec4 u_swap_xy; + +uniform vec4 u_inv_screen_dims; // size of the window or fullscreen +uniform vec4 u_source_dims; // size of the source texture + +uniform vec4 u_shadow_dims; // size of the shadow texture (extended to power-of-two size - not necessarily in bgfx) +uniform vec4 u_shadow_uv_offset; + +uniform vec4 u_prepare_bloom; // disables some effects for rendering bloom textures +uniform vec4 u_prepare_vector; + +uniform vec4 u_humbar_hertz_rate; // 60.0f / 59.94f - 1.0f; // difference between the 59.94 Hz field rate and 60 Hz line frequency (NTSC) +uniform vec4 u_humbar_alpha; // 0.0f; + +uniform vec4 u_time; // 0.0f; + +uniform vec4 u_screen_scale; // TODO: ScreenScale +uniform vec4 u_screen_offset; // TODO: ScreenOffset + +uniform vec4 u_scanline_alpha; +uniform vec4 u_scanline_scale; +uniform vec4 u_scanline_bright_scale; +uniform vec4 u_scanline_bright_offset; +uniform vec4 u_scanline_jitter; +uniform vec4 u_jitter_amount; +uniform vec4 u_scanline_height; + +uniform vec4 u_back_color; // TODO: Unused in current implementation, mostly + +uniform vec4 u_shadow_tile_mode; // ShadowTileMode = 0; // 0 based on screen dimension, 1 based on source dimension +uniform vec4 u_shadow_alpha; // ShadowAlpha = 0.0f; +uniform vec4 u_shadow_count; // ShadowCount = float2(6.0f, 6.0f); +uniform vec4 u_shadow_uv; // ShadowUV = float2(0.25f, 0.25f); + +uniform vec4 u_power; // Power = float3(1.0f, 1.0f, 1.0f); +uniform vec4 u_floor; // Floor = float3(0.0f, 0.0f, 0.0f); + +SAMPLER2D(DiffuseSampler, 0); +SAMPLER2D(ShadowSampler, 1); + +//----------------------------------------------------------------------------- +// Scanline & Shadowmask Pixel Shader +//----------------------------------------------------------------------------- + +vec2 GetAdjustedCoords(vec2 coord, vec2 center_offset) +{ + // center coordinates + coord -= center_offset; + + // apply screen scale + //coord /= u_screen_scale.xy; + + // un-center coordinates + coord += center_offset; + + // apply screen offset + coord += (center_offset * 2.0) * u_screen_offset.xy; + + return coord; +} + +void main() +{ + vec2 ScreenTexelDims = u_inv_screen_dims.xy; + vec2 SourceTexelDims = vec2(1.0, 1.0) / u_source_dims.xy; + vec2 SourceRes = u_source_dims.xy; + + vec2 HalfSourceRect = vec2(0.5, 0.5); + + vec2 ScreenCoord = v_texcoord1 / u_inv_screen_dims.xy; + vec2 BaseCoord = GetAdjustedCoords(v_texcoord0, HalfSourceRect); + + // Color + vec4 BaseColor = texture2D(DiffuseSampler, BaseCoord); + BaseColor.a = 1.0; + + if (BaseCoord.x < 0.0 || BaseCoord.y < 0.0) + { + BaseColor.rgb = vec3(0.0, 0.0, 0.0); + } + + // Mask Simulation (may not affect bloom) + if (u_prepare_bloom.x == 0.0 && u_shadow_alpha.x > 0.0) + { + vec2 shadowDims = u_swap_xy.x > 0.0 ? u_shadow_dims.yx : u_shadow_dims.xy; + vec2 screenCoord = u_shadow_tile_mode.x == 0.0 ? ScreenCoord : BaseCoord; + screenCoord = u_swap_xy.x > 0.0 ? screenCoord.yx : screenCoord.xy; + + vec2 shadowCount = u_swap_xy.x > 0.0 ? u_shadow_count.yx : u_shadow_count.xy; + vec2 shadowTile = ((u_shadow_tile_mode.x == 0.0 ? ScreenTexelDims : SourceTexelDims) * shadowCount); + shadowTile = u_swap_xy.x > 0.0 ? shadowTile.yx : shadowTile.xy; + + vec2 ShadowFrac = fract(screenCoord / shadowTile); + vec2 ShadowCoord = (ShadowFrac * u_shadow_uv.xy); + + vec4 ShadowColor = texture2D(ShadowSampler, ShadowCoord); + vec3 ShadowMaskColor = mix(vec3(1.0, 1.0, 1.0), ShadowColor.rgb, u_shadow_alpha.xxx); + float ShadowMaskClear = (1.0 - ShadowColor.a) * u_shadow_alpha.x; + + // apply shadow mask color + BaseColor.rgb *= ShadowMaskColor; + // clear shadow mask by background color + BaseColor.rgb = mix(BaseColor.rgb, u_back_color.rgb, ShadowMaskClear); + } + + // Color Compression (may not affect bloom) + if (u_prepare_bloom.x == 0.0) + { + // increasing the floor of the signal without affecting the ceiling + BaseColor.rgb = u_floor.rgb + (vec3(1.0, 1.0, 1.0) - u_floor.rgb) * BaseColor.rgb; + } + + // Color Power (may affect bloom) + BaseColor.r = pow(BaseColor.r, u_power.r); + BaseColor.g = pow(BaseColor.g, u_power.g); + BaseColor.b = pow(BaseColor.b, u_power.b); + + // Scanline Simulation (may not affect bloom) + if (u_prepare_bloom.x == 0.0) + { + // Scanline Simulation (may not affect vector screen) + if (u_prepare_vector.x == 0.0 && u_scanline_alpha.x > 0.0f) + { + float ScanCoord = v_texcoord0.y * u_source_dims.y * u_scanline_scale.x * 3.1415927; + float ScanCoordJitter = u_scanline_jitter.x * u_jitter_amount.x * 1.618034; + float ScanSine = sin(ScanCoord + ScanCoordJitter); + float ScanSineScaled = pow(ScanSine * ScanSine, 1.0);//u_scanline_height.x); + float ScanBrightness = (ScanSineScaled * u_scanline_bright_scale.x + 1.0 + u_scanline_bright_offset.x) * 0.5; + + BaseColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(ScanBrightness, ScanBrightness, ScanBrightness), u_scanline_alpha.xxx); + } + + // Hum Bar Simulation (may not affect vector screen) + if (u_prepare_vector.x == 0.0 && u_humbar_alpha.x > 0.0f) + { + float HumTimeStep = fract(u_time.x * 0.001); + float HumBrightness = 1.0 - fract(BaseCoord.y + HumTimeStep) * u_humbar_alpha.x; + BaseColor.rgb *= HumBrightness; + } + } + + vec4 Output = u_prepare_vector.x > 0.0 ? BaseColor * (v_color0 + vec4(1.0, 1.0, 1.0, 0.0)) : BaseColor * v_color0; + Output.a = 1.0; + + gl_FragColor = Output; +} diff --git a/src/osd/modules/render/bgfx/inputpair.cpp b/src/osd/modules/render/bgfx/inputpair.cpp index 5f5dc80221d..38845a67ea5 100644 --- a/src/osd/modules/render/bgfx/inputpair.cpp +++ b/src/osd/modules/render/bgfx/inputpair.cpp @@ -23,15 +23,7 @@ bgfx_input_pair::bgfx_input_pair(int index, std::string sampler, std::string tex { } -void bgfx_input_pair::bind(bgfx_effect *effect, texture_manager& textures) +void bgfx_input_pair::bind(bgfx_effect *effect, texture_manager& textures) const { bgfx::setTexture(m_index, effect->uniform(m_sampler)->handle(), textures.handle(m_texture)); - bgfx_uniform *size_uniform = effect->uniform("u_texsize"); - if (size_uniform != nullptr) - { - float width = float(textures.provider(m_texture)->width()); - float height = float(textures.provider(m_texture)->height()); - float size[4] = { 1.0f / width, 1.0f / height, 0.0f, 0.0f }; - size_uniform->set(reinterpret_cast(size), sizeof(float) * 4); - } } diff --git a/src/osd/modules/render/bgfx/inputpair.h b/src/osd/modules/render/bgfx/inputpair.h index f03dfe8200d..53a249c9693 100644 --- a/src/osd/modules/render/bgfx/inputpair.h +++ b/src/osd/modules/render/bgfx/inputpair.h @@ -24,7 +24,7 @@ class bgfx_input_pair public: bgfx_input_pair(int index, std::string sampler, std::string texture); - void bind(bgfx_effect *effect, texture_manager& textures); + void bind(bgfx_effect *effect, texture_manager& textures) const; // Getters std::string sampler() const { return m_sampler; } diff --git a/src/osd/modules/render/bgfx/parameter.h b/src/osd/modules/render/bgfx/parameter.h index 4cfbc5880c8..6a74efd887c 100644 --- a/src/osd/modules/render/bgfx/parameter.h +++ b/src/osd/modules/render/bgfx/parameter.h @@ -23,13 +23,14 @@ public: enum parameter_type { PARAM_FRAME, - PARAM_WINDOW + PARAM_WINDOW, + PARAM_TIME }; bgfx_parameter(std::string name, parameter_type type) : m_name(name), m_type(type) { } virtual ~bgfx_parameter() { } - virtual void tick(float delta) = 0; + virtual void tick(double delta) = 0; // Getters virtual float value() = 0; diff --git a/src/osd/modules/render/bgfx/paramreader.cpp b/src/osd/modules/render/bgfx/paramreader.cpp index c10d447c190..040730e2c4b 100644 --- a/src/osd/modules/render/bgfx/paramreader.cpp +++ b/src/osd/modules/render/bgfx/paramreader.cpp @@ -13,10 +13,12 @@ #include "parameter.h" #include "frameparameter.h" #include "windowparameter.h" +#include "timeparameter.h" const parameter_reader::string_to_enum parameter_reader::TYPE_NAMES[parameter_reader::TYPE_COUNT] = { { "frame", bgfx_parameter::parameter_type::PARAM_FRAME }, - { "window", bgfx_parameter::parameter_type::PARAM_WINDOW } + { "window", bgfx_parameter::parameter_type::PARAM_WINDOW }, + { "time", bgfx_parameter::parameter_type::PARAM_TIME } }; bgfx_parameter* parameter_reader::read_from_value(const Value& value, uint32_t window_index) @@ -31,11 +33,16 @@ bgfx_parameter* parameter_reader::read_from_value(const Value& value, uint32_t w uint32_t period = int(value["period"].GetDouble()); return new bgfx_frame_parameter(name, type, period); } - else if (type == bgfx_parameter::parameter_type::PARAM_WINDOW) - { - return new bgfx_window_parameter(name, type, window_index); - } - else + else if (type == bgfx_parameter::parameter_type::PARAM_WINDOW) + { + return new bgfx_window_parameter(name, type, window_index); + } + else if (type == bgfx_parameter::parameter_type::PARAM_TIME) + { + float limit = float(value["limit"].GetDouble()); + return new bgfx_time_parameter(name, type, limit); + } + else { assert(false); } @@ -49,6 +56,12 @@ void parameter_reader::validate_parameters(const Value& value) assert(value["name"].IsString()); assert(value.HasMember("type")); assert(value["type"].IsString()); - assert(value.HasMember("period")); - assert(value["period"].IsNumber()); + if (value.HasMember("period")) + { + assert(value["period"].IsNumber()); + } + if (value.HasMember("limit")) + { + assert(value["limit"].IsNumber()); + } } diff --git a/src/osd/modules/render/bgfx/paramreader.h b/src/osd/modules/render/bgfx/paramreader.h index 14ab9cecf02..bcdacd089e0 100644 --- a/src/osd/modules/render/bgfx/paramreader.h +++ b/src/osd/modules/render/bgfx/paramreader.h @@ -23,7 +23,7 @@ public: private: static void validate_parameters(const Value& value); - static const int TYPE_COUNT = 2; + static const int TYPE_COUNT = 3; static const string_to_enum TYPE_NAMES[TYPE_COUNT]; }; diff --git a/src/osd/modules/render/bgfx/sliderreader.cpp b/src/osd/modules/render/bgfx/sliderreader.cpp index dd59f308220..261961445ab 100644 --- a/src/osd/modules/render/bgfx/sliderreader.cpp +++ b/src/osd/modules/render/bgfx/sliderreader.cpp @@ -33,7 +33,7 @@ const slider_reader::string_to_enum slider_reader::SCREEN_NAMES[slider_reader::S { "all", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_ANY) } }; -std::vector slider_reader::read_from_value(const Value& value, running_machine& machine) +std::vector slider_reader::read_from_value(const Value& value, running_machine& machine, uint32_t window_index) { validate_parameters(value); @@ -86,21 +86,20 @@ std::vector slider_reader::read_from_value(const Value& value, run for (int index = 0; index < slider_count; index++) { std::string desc; - char full_name[1024]; // arbitrary - snprintf(full_name, 1024, "%s%d", name.c_str(), index); + std::string full_name = name + std::to_string(index); switch (index) { case 0: - desc = description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "X" : "Red"); + desc = "Window " + std::to_string(window_index) + ", " + description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "X" : "Red"); break; case 1: - desc = description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Y" : "Green"); + desc = "Window " + std::to_string(window_index) + ", " + description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Y" : "Green"); break; case 2: - desc = description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Invalid" : "Blue"); + desc = "Window " + std::to_string(window_index) + ", " + description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Invalid" : "Blue"); break; default: - desc = description + "Invalid"; + desc = "Window " + std::to_string(window_index) + ", " + description + "Invalid"; break; } sliders.push_back(new bgfx_slider(machine, full_name, min[index], defaults[index], max[index], step, type, screen_type, scale, format, desc, strings)); @@ -111,7 +110,7 @@ std::vector slider_reader::read_from_value(const Value& value, run int min = get_int(value, "min", 0); int def = get_int(value, "default", 0); int max = get_int(value, "max", 100); - sliders.push_back(new bgfx_slider(machine, name + "0", min, def, max, step, type, screen_type, scale, format, description, strings)); + sliders.push_back(new bgfx_slider(machine, name + "0", min, def, max, step, type, screen_type, scale, format, "Window " + std::to_string(window_index) + ", " + description, strings)); } return sliders; } @@ -121,7 +120,7 @@ void slider_reader::get_values(const Value& value, std::string name, int* values const char* name_str = name.c_str(); assert(value.HasMember(name_str)); assert(value[name_str].IsArray()); - + const Value& value_array = value[name_str]; for (UINT32 i = 0; i < value_array.Size() && i < count; i++) { diff --git a/src/osd/modules/render/bgfx/sliderreader.h b/src/osd/modules/render/bgfx/sliderreader.h index f9a9c595c0f..c2e254d1056 100644 --- a/src/osd/modules/render/bgfx/sliderreader.h +++ b/src/osd/modules/render/bgfx/sliderreader.h @@ -21,7 +21,7 @@ class running_machine; class slider_reader : public state_reader { public: - static std::vector read_from_value(const Value& value, running_machine& machine); + static std::vector read_from_value(const Value& value, running_machine& machine, uint32_t window_index); private: static void get_values(const Value& value, std::string name, int* values, const int count); diff --git a/src/osd/modules/render/bgfx/timeparameter.cpp b/src/osd/modules/render/bgfx/timeparameter.cpp new file mode 100644 index 00000000000..f1f10ce700b --- /dev/null +++ b/src/osd/modules/render/bgfx/timeparameter.cpp @@ -0,0 +1,33 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +//============================================================ +// +// timeparameter.cpp - Time-based dynamic shader param +// +//============================================================ + +#include "timeparameter.h" + +bgfx_time_parameter::bgfx_time_parameter(std::string name, parameter_type type, double limit) + : bgfx_parameter(name, type) + , m_current_time(0) + , m_limit(limit) +{ +} + +float bgfx_time_parameter::value() +{ + return float(m_current_time * 1000.0 * 1000.0); +} + +void bgfx_time_parameter::tick(double delta) +{ + m_current_time += delta; + if (m_limit != 0) + { + while (m_current_time >= m_limit) + { + m_current_time -= m_limit; + } + } +} diff --git a/src/osd/modules/render/bgfx/timeparameter.h b/src/osd/modules/render/bgfx/timeparameter.h new file mode 100644 index 00000000000..6a05be4fc03 --- /dev/null +++ b/src/osd/modules/render/bgfx/timeparameter.h @@ -0,0 +1,34 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +//============================================================ +// +// timeparameter.cpp - Time-based dynamic shader param +// +//============================================================ + +#pragma once + +#ifndef __DRAWBGFX_TIME_PARAMETER__ +#define __DRAWBGFX_TIME_PARAMETER__ + +#include + +#include + +#include "parameter.h" + +class bgfx_time_parameter : public bgfx_parameter +{ +public: + bgfx_time_parameter(std::string name, parameter_type type, double limit); + virtual ~bgfx_time_parameter() { } + + virtual float value() override; + virtual void tick(double delta) override; + +private: + double m_current_time; + double m_limit; +}; + +#endif // __DRAWBGFX_TIME_PARAMETER__ diff --git a/src/osd/modules/render/bgfx/vs_deconverge.sc b/src/osd/modules/render/bgfx/vs_deconverge.sc index 60603ae8dbe..21db02c490f 100644 --- a/src/osd/modules/render/bgfx/vs_deconverge.sc +++ b/src/osd/modules/render/bgfx/vs_deconverge.sc @@ -19,7 +19,7 @@ uniform vec4 u_radial_converge_red; uniform vec4 u_radial_converge_green; uniform vec4 u_radial_converge_blue; -uniform vec4 u_guest_dims; +uniform vec4 u_source_dims; void main() { @@ -32,9 +32,9 @@ void main() // radial converge offset to "translate" the most outer pixel as thay would be translated by the linar converge with the same amount vec2 radialConvergeOffset = 2.0 * u_screenrect.xy; - v_texcoord0 = (a_texcoord0 - HalfSourceRect) * (1.0 + u_radial_converge_red.xy * radialConvergeOffset) + HalfSourceRect + u_converge_red.xy * u_guest_dims.xy; - v_texcoord1 = (a_texcoord0 - HalfSourceRect) * (1.0 + u_radial_converge_green.xy * radialConvergeOffset) + HalfSourceRect + u_converge_green.xy * u_guest_dims.xy; - v_texcoord2 = (a_texcoord0 - HalfSourceRect) * (1.0 + u_radial_converge_blue.xy * radialConvergeOffset) + HalfSourceRect + u_converge_blue.xy * u_guest_dims.xy; + v_texcoord0 = (a_texcoord0 - HalfSourceRect) * (1.0 + u_radial_converge_red.xy * radialConvergeOffset) + HalfSourceRect + u_converge_red.xy * (vec2(1.0, 1.0) / u_source_dims.xy); + v_texcoord1 = (a_texcoord0 - HalfSourceRect) * (1.0 + u_radial_converge_green.xy * radialConvergeOffset) + HalfSourceRect + u_converge_green.xy * (vec2(1.0, 1.0) / u_source_dims.xy); + v_texcoord2 = (a_texcoord0 - HalfSourceRect) * (1.0 + u_radial_converge_blue.xy * radialConvergeOffset) + HalfSourceRect + u_converge_blue.xy * (vec2(1.0, 1.0) / u_source_dims.xy); v_color0 = a_color0; } diff --git a/src/osd/modules/render/bgfx/vs_defocus.sc b/src/osd/modules/render/bgfx/vs_defocus.sc new file mode 100644 index 00000000000..c3699f6fbd9 --- /dev/null +++ b/src/osd/modules/render/bgfx/vs_defocus.sc @@ -0,0 +1,14 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_color0 + +// license:BSD-3-Clause +// copyright-holders:Dario Manesku + +#include "../../../../../3rdparty/bgfx/examples/common/common.sh" + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/vs_distortion.sc b/src/osd/modules/render/bgfx/vs_distortion.sc new file mode 100644 index 00000000000..c3699f6fbd9 --- /dev/null +++ b/src/osd/modules/render/bgfx/vs_distortion.sc @@ -0,0 +1,14 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_color0 + +// license:BSD-3-Clause +// copyright-holders:Dario Manesku + +#include "../../../../../3rdparty/bgfx/examples/common/common.sh" + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/vs_post.sc b/src/osd/modules/render/bgfx/vs_post.sc new file mode 100644 index 00000000000..12b4931a1ae --- /dev/null +++ b/src/osd/modules/render/bgfx/vs_post.sc @@ -0,0 +1,19 @@ +$input a_position, a_texcoord0, a_color0 +$output v_texcoord0, v_texcoord1, v_color0 + +// license:BSD-3-Clause +// copyright-holders:Dario Manesku + +#include "../../../../../3rdparty/bgfx/examples/common/common.sh" + +uniform vec4 u_swap_xy; + +uniform vec4 u_shadow_uv_offset; + +void main() +{ + gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); + v_texcoord0 = a_texcoord0; + v_texcoord1 = a_position.xy + ((u_swap_xy.x != 0.0) ? u_shadow_uv_offset.yx : u_shadow_uv_offset.xy); + v_color0 = a_color0; +} diff --git a/src/osd/modules/render/bgfx/windowparameter.h b/src/osd/modules/render/bgfx/windowparameter.h index f4763647c32..83afdb220b7 100644 --- a/src/osd/modules/render/bgfx/windowparameter.h +++ b/src/osd/modules/render/bgfx/windowparameter.h @@ -24,7 +24,7 @@ public: virtual ~bgfx_window_parameter() { } virtual float value() override { return float(m_index); } - virtual void tick(float delta) override { }; + virtual void tick(double delta) override { }; private: uint32_t m_index; diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 7080800773c..133f946c3e8 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -1701,10 +1701,10 @@ void shaders::render_quad(poly_info *poly, int vertnum) int next_index = 0; - next_index = ntsc_pass(rt, next_index, poly, vertnum); - next_index = color_convolution_pass(rt, next_index, poly, vertnum); - next_index = prescale_pass(rt, next_index, poly, vertnum); - next_index = deconverge_pass(rt, next_index, poly, vertnum); + next_index = ntsc_pass(rt, next_index, poly, vertnum); // handled in bgfx + next_index = color_convolution_pass(rt, next_index, poly, vertnum); // handled in bgfx + next_index = prescale_pass(rt, next_index, poly, vertnum); // handled in bgfx + next_index = deconverge_pass(rt, next_index, poly, vertnum); // handled in bgfx next_index = defocus_pass(rt, next_index, poly, vertnum); // 1st pass next_index = defocus_pass(rt, next_index, poly, vertnum); // 2nd pass next_index = phosphor_pass(rt, ct, next_index, poly, vertnum); @@ -2704,6 +2704,7 @@ void uniform::update() shadersys->curr_poly->get_prim_width(), shadersys->curr_poly->get_prim_height() }; m_shader->set_vector("QuadDims", 2, quaddims); + printf("Quad Dims: %f, %f\n", quaddims[0], quaddims[1]); } break; } diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp index 76ae3dd800b..539c9ee4d14 100644 --- a/src/osd/modules/render/drawbgfx.cpp +++ b/src/osd/modules/render/drawbgfx.cpp @@ -55,6 +55,7 @@ const uint16_t renderer_bgfx::CACHE_SIZE = 1024; const uint32_t renderer_bgfx::PACKABLE_SIZE = 128; const uint32_t renderer_bgfx::WHITE_HASH = 0x87654321; +const char* renderer_bgfx::WINDOW_PREFIX = "Window 0, "; //============================================================ // MACROS diff --git a/src/osd/modules/render/drawbgfx.h b/src/osd/modules/render/drawbgfx.h index c64c189688a..999bf852923 100644 --- a/src/osd/modules/render/drawbgfx.h +++ b/src/osd/modules/render/drawbgfx.h @@ -39,7 +39,9 @@ public: virtual int create() override; virtual slider_state* get_slider_list() override; + virtual bool multi_window_sliders() { return true; } virtual int draw(const int update) override; + #ifdef OSD_SDL virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) override; #else @@ -47,13 +49,16 @@ public: virtual void record() override { } virtual void toggle_fsfx() override { } #endif - virtual render_primitive_list *get_primitives() override + + virtual render_primitive_list *get_primitives() override { osd_dim wdim = window().get_size(); window().target()->set_bounds(wdim.width(), wdim.height(), window().aspect()); return &window().target()->get_primitives(); } + static const char* WINDOW_PREFIX; + private: int handle_screen_chains(); diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp index 326e8248bab..638c2eb14cb 100644 --- a/src/osd/windows/window.cpp +++ b/src/osd/windows/window.cpp @@ -289,13 +289,24 @@ void windows_osd_interface::update_slider_list() } } +int windows_osd_interface::window_count() +{ + int count = 0; + for (win_window_info *info = win_window_list; info != nullptr; info = info->m_next) + { + count++; + } + return count; +} + void windows_osd_interface::build_slider_list() { m_sliders = nullptr; slider_state *curr = m_sliders; + int index = 0; for (win_window_info *info = win_window_list; info != nullptr; info = info->m_next) { - slider_state *window_sliders = info->m_renderer->get_slider_list(); + slider_state *window_sliders = info->m_renderer->get_slider_list(); if (window_sliders != nullptr) { if (m_sliders == nullptr) @@ -310,6 +321,7 @@ void windows_osd_interface::build_slider_list() } curr->next = window_sliders; } + index++; } } } @@ -841,7 +853,9 @@ void win_window_info::create(running_machine &machine, int index, osd_monitor_in } } else + { window->m_init_state = window->complete_create() ? -1 : 1; + } // handle error conditions if (window->m_init_state == -1) diff --git a/src/osd/windows/winmain.h b/src/osd/windows/winmain.h index 9869f3bfecf..8855e191b90 100644 --- a/src/osd/windows/winmain.h +++ b/src/osd/windows/winmain.h @@ -296,6 +296,8 @@ public: windows_options &options() { return m_options; } + int window_count(); + private: virtual void osd_exit() override; void build_slider_list();