summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author therealmogminer@gmail.com <therealmogminer@gmail.com>2016-03-12 01:31:13 +0100
committer therealmogminer@gmail.com <therealmogminer@gmail.com>2016-03-13 15:51:19 +0100
commitcd8f796df658caf91af31de35d87ab0de77e69e9 (patch)
treed4abc539d9cfa747080806c0e10e3f190265dc4d
parentad1e6ef899eb856f14354fa952b2a2b0c8aafaa7 (diff)
Add bgfx command line options, major shakeup of organization, nw
-rw-r--r--3rdparty/bgfx/scripts/shader.mk22
-rw-r--r--bgfx/chains/hlsl.json135
-rw-r--r--bgfx/chains/test.json2
-rw-r--r--bgfx/effects/color.json28
-rw-r--r--bgfx/effects/deconverge.json33
-rw-r--r--bgfx/effects/ntsc_decode.json35
-rw-r--r--bgfx/effects/ntsc_encode.json31
-rw-r--r--bgfx/shaders/dx11/fs_blit.binbin0 -> 38808 bytes
-rw-r--r--bgfx/shaders/dx11/fs_color.binbin0 -> 41211 bytes
-rw-r--r--bgfx/shaders/dx11/fs_deconverge.binbin0 -> 41062 bytes
-rw-r--r--bgfx/shaders/dx11/fs_gui.binbin0 -> 38808 bytes
-rw-r--r--bgfx/shaders/dx11/fs_ntsc.binbin0 -> 2222 bytes
-rw-r--r--bgfx/shaders/dx11/fs_ntsc_decode.binbin0 -> 58542 bytes
-rw-r--r--bgfx/shaders/dx11/fs_ntsc_encode.binbin0 -> 48410 bytes
-rw-r--r--bgfx/shaders/dx11/fs_phosphor.binbin0 -> 41138 bytes
-rw-r--r--bgfx/shaders/dx11/fs_ratios.binbin0 -> 41118 bytes
-rw-r--r--bgfx/shaders/dx11/fs_screen.binbin0 -> 38808 bytes
-rw-r--r--bgfx/shaders/dx11/fs_tint.binbin0 -> 38963 bytes
-rw-r--r--bgfx/shaders/dx11/vs_blit.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_color.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_deconverge.binbin0 -> 43858 bytes
-rw-r--r--bgfx/shaders/dx11/vs_gui.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_ntsc.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_ntsc_decode.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_ntsc_encode.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_phosphor.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_ratios.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_screen.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx11/vs_tint.binbin0 -> 38987 bytes
-rw-r--r--bgfx/shaders/dx9/fs_blit.binbin0 -> 605 bytes
-rw-r--r--bgfx/shaders/dx9/fs_color.binbin0 -> 1483 bytes
-rw-r--r--bgfx/shaders/dx9/fs_deconverge.binbin0 -> 1026 bytes
-rw-r--r--bgfx/shaders/dx9/fs_gui.binbin0 -> 645 bytes
-rw-r--r--bgfx/shaders/dx9/fs_ntsc.binbin0 -> 10454 bytes
-rw-r--r--bgfx/shaders/dx9/fs_ntsc_decode.binbin0 -> 8110 bytes
-rw-r--r--bgfx/shaders/dx9/fs_ntsc_encode.binbin0 -> 4010 bytes
-rw-r--r--bgfx/shaders/dx9/fs_phosphor.binbin0 -> 1103 bytes
-rw-r--r--bgfx/shaders/dx9/fs_ratios.binbin0 -> 1171 bytes
-rw-r--r--bgfx/shaders/dx9/fs_screen.binbin0 -> 605 bytes
-rw-r--r--bgfx/shaders/dx9/fs_tint.binbin0 -> 896 bytes
-rw-r--r--bgfx/shaders/dx9/vs_blit.binbin0 -> 886 bytes
-rw-r--r--bgfx/shaders/dx9/vs_color.binbin0 -> 886 bytes
-rw-r--r--bgfx/shaders/dx9/vs_deconverge.binbin0 -> 2037 bytes
-rw-r--r--bgfx/shaders/dx9/vs_gui.binbin0 -> 886 bytes
-rw-r--r--bgfx/shaders/dx9/vs_ntsc.binbin0 -> 886 bytes
-rw-r--r--bgfx/shaders/dx9/vs_ntsc_decode.binbin0 -> 894 bytes
-rw-r--r--bgfx/shaders/dx9/vs_ntsc_encode.binbin0 -> 894 bytes
-rw-r--r--bgfx/shaders/dx9/vs_phosphor.binbin0 -> 890 bytes
-rw-r--r--bgfx/shaders/dx9/vs_ratios.binbin0 -> 886 bytes
-rw-r--r--bgfx/shaders/dx9/vs_screen.binbin0 -> 886 bytes
-rw-r--r--bgfx/shaders/dx9/vs_tint.binbin0 -> 886 bytes
-rw-r--r--bgfx/shaders/gles/fs_blit.bin (renamed from shaders/gles/fs_blit.bin)bin238 -> 238 bytes
-rw-r--r--bgfx/shaders/gles/fs_color.binbin0 -> 976 bytes
-rw-r--r--bgfx/shaders/gles/fs_deconverge.binbin0 -> 469 bytes
-rw-r--r--bgfx/shaders/gles/fs_gui.bin (renamed from shaders/gles/fs_gui.bin)bin238 -> 238 bytes
-rw-r--r--bgfx/shaders/gles/fs_ntsc.binbin0 -> 7591 bytes
-rw-r--r--bgfx/shaders/gles/fs_ntsc_decode.binbin0 -> 5045 bytes
-rw-r--r--bgfx/shaders/gles/fs_ntsc_encode.binbin0 -> 2998 bytes
-rw-r--r--bgfx/shaders/gles/fs_phosphor.bin (renamed from shaders/gles/fs_phosphor.bin)bin599 -> 599 bytes
-rw-r--r--bgfx/shaders/gles/fs_ratios.bin (renamed from shaders/gles/fs_ratios.bin)bin745 -> 745 bytes
-rw-r--r--bgfx/shaders/gles/fs_screen.bin (renamed from shaders/gles/fs_screen.bin)bin238 -> 238 bytes
-rw-r--r--bgfx/shaders/gles/fs_tint.bin (renamed from shaders/gles/fs_tint.bin)bin438 -> 438 bytes
-rw-r--r--bgfx/shaders/gles/vs_blit.bin (renamed from shaders/gles/vs_blit.bin)bin419 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_color.bin (renamed from shaders/gles/vs_gui.bin)bin419 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_deconverge.binbin0 -> 1565 bytes
-rw-r--r--bgfx/shaders/gles/vs_gui.bin (renamed from shaders/gles/vs_phosphor.bin)bin419 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_ntsc.bin (renamed from shaders/gles/vs_ratios.bin)bin419 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_ntsc_decode.bin (renamed from shaders/gles/vs_screen.bin)bin419 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_ntsc_encode.bin (renamed from shaders/gles/vs_tint.bin)bin419 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_phosphor.binbin0 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_ratios.binbin0 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_screen.binbin0 -> 419 bytes
-rw-r--r--bgfx/shaders/gles/vs_tint.binbin0 -> 419 bytes
-rw-r--r--bgfx/shaders/glsl/fs_blit.bin (renamed from shaders/glsl/fs_blit.bin)bin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/fs_color.binbin0 -> 909 bytes
-rw-r--r--bgfx/shaders/glsl/fs_deconverge.binbin0 -> 440 bytes
-rw-r--r--bgfx/shaders/glsl/fs_gui.bin (renamed from shaders/glsl/fs_gui.bin)bin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/fs_ntsc.binbin0 -> 7168 bytes
-rw-r--r--bgfx/shaders/glsl/fs_ntsc_decode.binbin0 -> 4768 bytes
-rw-r--r--bgfx/shaders/glsl/fs_ntsc_encode.binbin0 -> 2849 bytes
-rw-r--r--bgfx/shaders/glsl/fs_phosphor.bin (renamed from shaders/glsl/fs_phosphor.bin)bin520 -> 520 bytes
-rw-r--r--bgfx/shaders/glsl/fs_ratios.bin (renamed from shaders/glsl/fs_ratios.bin)bin694 -> 694 bytes
-rw-r--r--bgfx/shaders/glsl/fs_screen.bin (renamed from shaders/glsl/fs_screen.bin)bin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/fs_tint.bin (renamed from shaders/glsl/fs_tint.bin)bin371 -> 371 bytes
-rw-r--r--bgfx/shaders/glsl/vs_blit.bin (renamed from shaders/glsl/vs_blit.bin)bin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_color.bin (renamed from shaders/glsl/vs_gui.bin)bin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_deconverge.binbin0 -> 1451 bytes
-rw-r--r--bgfx/shaders/glsl/vs_gui.bin (renamed from shaders/glsl/vs_phosphor.bin)bin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_ntsc.bin (renamed from shaders/glsl/vs_ratios.bin)bin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_ntsc_decode.bin (renamed from shaders/glsl/vs_screen.bin)bin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_ntsc_encode.bin (renamed from shaders/glsl/vs_tint.bin)bin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_phosphor.binbin0 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_ratios.binbin0 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_screen.binbin0 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_tint.binbin0 -> 377 bytes
-rw-r--r--bgfx/shaders/metal/fs_blit.bin (renamed from shaders/metal/fs_blit.bin)bin634 -> 634 bytes
-rw-r--r--bgfx/shaders/metal/fs_color.binbin0 -> 1334 bytes
-rw-r--r--bgfx/shaders/metal/fs_deconverge.binbin0 -> 1069 bytes
-rw-r--r--bgfx/shaders/metal/fs_gui.bin (renamed from shaders/metal/fs_gui.bin)bin634 -> 634 bytes
-rw-r--r--bgfx/shaders/metal/fs_ntsc.binbin0 -> 8322 bytes
-rw-r--r--bgfx/shaders/metal/fs_ntsc_decode.binbin0 -> 5616 bytes
-rw-r--r--bgfx/shaders/metal/fs_ntsc_encode.binbin0 -> 3613 bytes
-rw-r--r--bgfx/shaders/metal/fs_phosphor.bin (renamed from shaders/metal/fs_phosphor.bin)bin1066 -> 1066 bytes
-rw-r--r--bgfx/shaders/metal/fs_ratios.bin (renamed from shaders/metal/fs_ratios.bin)bin1116 -> 1116 bytes
-rw-r--r--bgfx/shaders/metal/fs_screen.bin (renamed from shaders/metal/fs_screen.bin)bin634 -> 634 bytes
-rw-r--r--bgfx/shaders/metal/fs_tint.bin (renamed from shaders/metal/fs_tint.bin)bin835 -> 835 bytes
-rw-r--r--bgfx/shaders/metal/vs_blit.bin (renamed from shaders/metal/vs_blit.bin)bin757 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_color.bin (renamed from shaders/metal/vs_gui.bin)bin757 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_deconverge.binbin0 -> 1709 bytes
-rw-r--r--bgfx/shaders/metal/vs_gui.bin (renamed from shaders/metal/vs_phosphor.bin)bin757 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_ntsc.bin (renamed from shaders/metal/vs_ratios.bin)bin757 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_ntsc_decode.bin (renamed from shaders/metal/vs_screen.bin)bin757 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_ntsc_encode.bin (renamed from shaders/metal/vs_tint.bin)bin757 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_phosphor.binbin0 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_ratios.binbin0 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_screen.binbin0 -> 757 bytes
-rw-r--r--bgfx/shaders/metal/vs_tint.binbin0 -> 757 bytes
-rw-r--r--scripts/src/osd/modules.lua3
-rw-r--r--shaders/dx11/fs_blit.binbin396 -> 0 bytes
-rw-r--r--shaders/dx11/fs_gui.binbin396 -> 0 bytes
-rw-r--r--shaders/dx11/fs_phosphor.binbin678 -> 0 bytes
-rw-r--r--shaders/dx11/fs_ratios.binbin658 -> 0 bytes
-rw-r--r--shaders/dx11/fs_screen.binbin396 -> 0 bytes
-rw-r--r--shaders/dx11/fs_tint.binbin551 -> 0 bytes
-rw-r--r--shaders/dx11/vs_blit.binbin575 -> 0 bytes
-rw-r--r--shaders/dx11/vs_gui.binbin575 -> 0 bytes
-rw-r--r--shaders/dx11/vs_phosphor.binbin575 -> 0 bytes
-rw-r--r--shaders/dx11/vs_ratios.binbin575 -> 0 bytes
-rw-r--r--shaders/dx11/vs_screen.binbin575 -> 0 bytes
-rw-r--r--shaders/dx11/vs_tint.binbin575 -> 0 bytes
-rw-r--r--shaders/dx9/fs_blit.binbin237 -> 0 bytes
-rw-r--r--shaders/dx9/fs_gui.binbin237 -> 0 bytes
-rw-r--r--shaders/dx9/fs_phosphor.binbin507 -> 0 bytes
-rw-r--r--shaders/dx9/fs_ratios.binbin547 -> 0 bytes
-rw-r--r--shaders/dx9/fs_screen.binbin237 -> 0 bytes
-rw-r--r--shaders/dx9/fs_tint.binbin456 -> 0 bytes
-rw-r--r--shaders/dx9/vs_blit.binbin326 -> 0 bytes
-rw-r--r--shaders/dx9/vs_gui.binbin326 -> 0 bytes
-rw-r--r--shaders/dx9/vs_phosphor.binbin326 -> 0 bytes
-rw-r--r--shaders/dx9/vs_ratios.binbin326 -> 0 bytes
-rw-r--r--shaders/dx9/vs_screen.binbin326 -> 0 bytes
-rw-r--r--shaders/dx9/vs_tint.binbin326 -> 0 bytes
-rw-r--r--src/osd/modules/lib/osdobj_common.cpp6
-rw-r--r--src/osd/modules/lib/osdobj_common.h7
-rw-r--r--src/osd/modules/render/bgfx/chainentry.cpp57
-rw-r--r--src/osd/modules/render/bgfx/chainentryreader.cpp4
-rw-r--r--src/osd/modules/render/bgfx/chainentryreader.h3
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp14
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.h10
-rw-r--r--src/osd/modules/render/bgfx/chainreader.cpp14
-rw-r--r--src/osd/modules/render/bgfx/chainreader.h2
-rw-r--r--src/osd/modules/render/bgfx/effect.h1
-rw-r--r--src/osd/modules/render/bgfx/effectmanager.cpp2
-rw-r--r--src/osd/modules/render/bgfx/effectmanager.h3
-rw-r--r--src/osd/modules/render/bgfx/entryuniformreader.cpp12
-rw-r--r--src/osd/modules/render/bgfx/entryuniformreader.h3
-rw-r--r--src/osd/modules/render/bgfx/frameparameter.cpp26
-rw-r--r--src/osd/modules/render/bgfx/frameparameter.h34
-rw-r--r--src/osd/modules/render/bgfx/fs_color.sc53
-rw-r--r--src/osd/modules/render/bgfx/fs_deconverge.sc21
-rw-r--r--src/osd/modules/render/bgfx/fs_ntsc_decode.sc135
-rw-r--r--src/osd/modules/render/bgfx/fs_ntsc_encode.sc77
-rw-r--r--src/osd/modules/render/bgfx/inputpair.h4
-rw-r--r--src/osd/modules/render/bgfx/parameter.cpp56
-rw-r--r--src/osd/modules/render/bgfx/parameter.h24
-rw-r--r--src/osd/modules/render/bgfx/paramreader.cpp28
-rw-r--r--src/osd/modules/render/bgfx/paramreader.h6
-rw-r--r--src/osd/modules/render/bgfx/paramuniform.cpp23
-rw-r--r--src/osd/modules/render/bgfx/paramuniform.h29
-rw-r--r--src/osd/modules/render/bgfx/shadermanager.cpp16
-rw-r--r--src/osd/modules/render/bgfx/shadermanager.h10
-rw-r--r--src/osd/modules/render/bgfx/suppressor.cpp3
-rw-r--r--src/osd/modules/render/bgfx/suppressor.h16
-rw-r--r--src/osd/modules/render/bgfx/suppressorreader.cpp10
-rw-r--r--src/osd/modules/render/bgfx/suppressorreader.h2
-rw-r--r--src/osd/modules/render/bgfx/varying.def.sc4
-rw-r--r--src/osd/modules/render/bgfx/vs_color.sc14
-rw-r--r--src/osd/modules/render/bgfx/vs_deconverge.sc40
-rw-r--r--src/osd/modules/render/bgfx/vs_ntsc_decode.sc14
-rw-r--r--src/osd/modules/render/bgfx/vs_ntsc_encode.sc14
-rw-r--r--src/osd/modules/render/bgfx/windowparameter.h33
-rw-r--r--src/osd/modules/render/d3d/d3dcomm.h49
-rw-r--r--src/osd/modules/render/drawbgfx.cpp16
-rw-r--r--src/osd/windows/winmain.cpp2
184 files changed, 1016 insertions, 170 deletions
diff --git a/3rdparty/bgfx/scripts/shader.mk b/3rdparty/bgfx/scripts/shader.mk
index 7a479ea8896..97be37eeee2 100644
--- a/3rdparty/bgfx/scripts/shader.mk
+++ b/3rdparty/bgfx/scripts/shader.mk
@@ -25,38 +25,38 @@ all:
else
ifeq ($(TARGET), 0)
-VS_FLAGS=--platform windows -p vs_3_0 -O 3
-FS_FLAGS=--platform windows -p ps_3_0 -O 3
-SHADER_PATH=shaders/dx9
+VS_FLAGS=--platform windows -p vs_3_0 -O 3 --debug
+FS_FLAGS=--platform windows -p ps_3_0 -O 3 --debug
+SHADER_PATH=bgfx/shaders/dx9
else
ifeq ($(TARGET), 1)
-VS_FLAGS=--platform windows -p vs_4_0 -O 3
-FS_FLAGS=--platform windows -p ps_4_0 -O 3
-CS_FLAGS=--platform windows -p cs_5_0 -O 1
-SHADER_PATH=shaders/dx11
+VS_FLAGS=--platform windows -p vs_4_0 -O 3 --debug
+FS_FLAGS=--platform windows -p ps_4_0 -O 3 --debug
+CS_FLAGS=--platform windows -p cs_5_0 -O 1 --debug
+SHADER_PATH=bgfx/shaders/dx11
else
ifeq ($(TARGET), 2)
VS_FLAGS=--platform nacl
FS_FLAGS=--platform nacl
-SHADER_PATH=shaders/gles
+SHADER_PATH=bgfx/shaders/gles
else
ifeq ($(TARGET), 3)
VS_FLAGS=--platform android
FS_FLAGS=--platform android
CS_FLAGS=--platform android
-SHADER_PATH=shaders/gles
+SHADER_PATH=bgfx/shaders/gles
else
ifeq ($(TARGET), 4)
VS_FLAGS=--platform linux -p 120
FS_FLAGS=--platform linux -p 120
CS_FLAGS=--platform linux -p 430
-SHADER_PATH=shaders/glsl
+SHADER_PATH=bgfx/shaders/glsl
else
ifeq ($(TARGET), 5)
VS_FLAGS=--platform osx -p metal
FS_FLAGS=--platform osx -p metal
CS_FLAGS=--platform osx -p metal
-SHADER_PATH=shaders/metal
+SHADER_PATH=bgfx/shaders/metal
endif
endif
endif
diff --git a/bgfx/chains/hlsl.json b/bgfx/chains/hlsl.json
new file mode 100644
index 00000000000..df743cd9d7d
--- /dev/null
+++ b/bgfx/chains/hlsl.json
@@ -0,0 +1,135 @@
+{ "name": "Classic D3D HLSL CRT Simulation",
+ "author": "Ryan Holtz & ImJezze",
+ "sliders": [
+ { "type": "int_enum", "name": "adjustments", "text": "Enable Adjustments", "default": 0, "max": 1, "min": 0, "step": 1, "scale": 1.0, "format": "%s", "screen": "any", "strings": [ "Off", "On" ] },
+
+ { "type": "int_enum", "name": "ntsc", "text": "Enable NTSC", "default": 0, "max": 1, "min": 0, "step": 1, "scale": 1.0, "format": "%s", "screen": "any", "strings": [ "Off", "On" ] },
+ { "type": "float", "name": "a_value", "text": "NTSC A Value", "default": 50, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "float", "name": "b_value", "text": "NTSC B Value", "default": 50, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "float", "name": "cc_value", "text": "NTSC Color Carrier (Hz)", "default": 35795454, "max": 36795454, "min": 34795454, "step": 100, "scale": 0.0000001, "format": "%1.7f", "screen": "raster" },
+ { "type": "float", "name": "o_value", "text": "NTSC Time Offset", "default": 0, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "float", "name": "p_value", "text": "NTSC Phase Offset", "default": 100, "max": 200, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "float", "name": "scan_time", "text": "NTSC Scanline Duration (uSec)", "default": 526, "max": 1500, "min": 1, "step": 1, "scale": 0.1, "format": "%3.1f", "screen": "raster" },
+ { "type": "float", "name": "notch_width", "text": "NTSC Color Notch Filter Width", "default": 100, "max": 400, "min": 1, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "float", "name": "y_freq_response", "text": "NTSC Y Signal Bandwidth (Hz)", "default": 600, "max": 2100, "min": 1, "step": 10, "scale": 0.01, "format": "%2.2f", "screen": "raster" },
+ { "type": "float", "name": "i_freq_response", "text": "NTSC I Signal Bandwidth (Hz)", "default": 120, "max": 2100, "min": 1, "step": 10, "scale": 0.01, "format": "%2.2f", "screen": "raster" },
+ { "type": "float", "name": "q_freq_response", "text": "NTSC Q Signal Bandwidth (Hz)", "default": 60, "max": 2100, "min": 1, "step": 10, "scale": 0.01, "format": "%2.2f", "screen": "raster" },
+ { "type": "float", "name": "jitter_offset", "text": "NTSC Frame Jitter Offset", "default": 0, "max": 200, "min": 1, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+
+ { "type": "color", "name": "red_ratios", "text": "Red Output from ", "default": [ 100, 0, 0 ], "max": [ 200, 200, 200 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "color", "name": "grn_ratios", "text": "Green Output from ", "default": [ 0, 100, 0 ], "max": [ 200, 200, 200 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "color", "name": "blu_ratios", "text": "Blue Output from ", "default": [ 0, 0, 100 ], "max": [ 200, 200, 200 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "color", "name": "offset", "text": "Signal Offset, ", "default": [ 0, 0, 0 ], "max": [ 200, 200, 200 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "color", "name": "scale", "text": "Signal Scale, ", "default": [ 100, 100, 100 ], "max": [ 200, 200, 200 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+ { "type": "float", "name": "saturation", "text": "Color Saturation", "default": 100, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" },
+
+ { "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" }
+ ],
+ "parameters": [
+ { "name": "jitter", "type": "frame", "period": 2 }
+ ],
+ "targets": [
+ {
+ "name": "guest",
+ "mode": "guest",
+ "prescale": 1,
+ "doublebuffer": true
+ },
+ { "name": "native",
+ "mode": "native",
+ "prescale": 1,
+ "doublebuffer": true
+ },
+ { "name": "previous",
+ "mode": "native",
+ "prescale": 1,
+ "doublebuffer": true
+ }
+ ],
+ "passes": [
+ { "effect": "ntsc_encode",
+ "name": "NTSC Decode",
+ "disablewhen": [
+ { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 },
+ { "type": "slider", "condition": "equal", "combine": "or", "name": "ntsc", "value": 0 }
+ ],
+ "uniforms": [
+ { "uniform": "u_a_value", "slider": "a_value" },
+ { "uniform": "u_b_value", "slider": "b_value" },
+ { "uniform": "u_cc_value", "slider": "cc_value" },
+ { "uniform": "u_p_value", "slider": "p_value" },
+ { "uniform": "u_scan_time", "slider": "scan_time" },
+ { "uniform": "u_jitter_offset", "slider": "jitter_offset" },
+ { "uniform": "u_jitter_amount", "parameter": "jitter" }
+ ],
+ "input": [
+ { "sampler": "DiffuseSampler", "texture": "screen" }
+ ],
+ "output": "guest"
+ },
+ { "effect": "ntsc_decode",
+ "name": "NTSC Decode",
+ "disablewhen": [
+ { "type": "slider", "condition": "equal", "combine": "or", "name": "adjustments", "value": 0 },
+ { "type": "slider", "condition": "equal", "combine": "or", "name": "ntsc", "value": 0 }
+ ],
+ "uniforms": [
+ { "uniform": "u_a_value", "slider": "a_value" },
+ { "uniform": "u_b_value", "slider": "b_value" },
+ { "uniform": "u_cc_value", "slider": "cc_value" },
+ { "uniform": "u_o_value", "slider": "o_value" },
+ { "uniform": "u_scan_time", "slider": "scan_time" },
+ { "uniform": "u_notch_width", "slider": "notch_width" },
+ { "uniform": "u_y_freq_response", "slider": "y_freq_response" },
+ { "uniform": "u_i_freq_response", "slider": "i_freq_response" },
+ { "uniform": "u_q_freq_response", "slider": "q_freq_response" },
+ { "uniform": "u_q_freq_response", "slider": "q_freq_response" },
+ { "uniform": "u_jitter_offset", "slider": "jitter_offset" },
+ { "uniform": "u_jitter_amount", "parameter": "jitter" }
+ ],
+ "input": [
+ { "sampler": "DiffuseSampler", "texture": "guest" }
+ ],
+ "output": "guest"
+ },
+ { "effect": "blit",
+ "name": "NTSC Skip",
+ "disablewhen": [
+ { "type": "slider", "condition": "notequal", "combine": "and", "name": "adjustments", "value": 0 },
+ { "type": "slider", "condition": "notequal", "combine": "and", "name": "ntsc", "value": 0 }
+ ],
+ "input": [
+ { "sampler": "s_tex", "texture": "screen" }
+ ],
+ "output": "guest"
+ },
+ { "effect": "blit",
+ "name": "Prescale",
+ "input": [
+ { "sampler": "s_tex", "texture": "guest" }
+ ],
+ "output": "native"
+ },
+ { "effect": "deconverge",
+ "name": "Deconvergence",
+ "uniforms": [
+ { "uniform": "u_converge_red", "slider": "converge_red" },
+ { "uniform": "u_converge_green", "slider": "converge_green" },
+ { "uniform": "u_converge_blue", "slider": "converge_blue" },
+ { "uniform": "u_radial_converge_red", "slider": "radial_converge_red" },
+ { "uniform": "u_radial_converge_green", "slider": "radial_converge_green" },
+ { "uniform": "u_radial_converge_blue", "slider": "radial_converge_blue" }
+ ],
+ "input": [
+ { "sampler": "DiffuseSampler", "texture": "native" }
+ ],
+ "output": "native"
+ }
+ ],
+ "output": "native"
+} \ No newline at end of file
diff --git a/bgfx/chains/test.json b/bgfx/chains/test.json
index ddd12df8ff7..f698ff6cf54 100644
--- a/bgfx/chains/test.json
+++ b/bgfx/chains/test.json
@@ -11,7 +11,7 @@
{ "type": "vec2", "name": "shift", "text": "Frame Shift ", "default": [ 0, 0 ], "max": [ 25, 25 ], "min": [ -25, -25 ], "step": 1, "scale": 1.0, "format": "%2.f", "screen": "raster" }
],
"parameters": [
- { "name": "alternating", "type": "frame_mask", "period": 2 }
+ { "name": "alternating", "type": "frame", "period": 2 }
],
"targets": [
{ "name": "native",
diff --git a/bgfx/effects/color.json b/bgfx/effects/color.json
new file mode 100644
index 00000000000..8e1ad25e167
--- /dev/null
+++ b/bgfx/effects/color.json
@@ -0,0 +1,28 @@
+{
+ "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_color",
+ "fragment": "fs_color",
+ "uniforms": [
+ { "name": "DiffuseSampler", "type": "int", "values": [ 1.0 ] },
+ { "name": "u_red_ratios", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_grn_ratios", "type": "vec4", "values": [ 0.0, 1.0, 0.0, 0.0 ] },
+ { "name": "u_blu_ratios", "type": "vec4", "values": [ 0.0, 0.0, 1.0, 0.0 ] },
+ { "name": "u_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_scale", "type": "vec4", "values": [ 1.0, 1.0, 1.0, 0.0 ] },
+ { "name": "u_saturation", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }
+ ]
+} \ No newline at end of file
diff --git a/bgfx/effects/deconverge.json b/bgfx/effects/deconverge.json
new file mode 100644
index 00000000000..71a0c6e3cb8
--- /dev/null
+++ b/bgfx/effects/deconverge.json
@@ -0,0 +1,33 @@
+{
+ "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_deconverge",
+ "fragment": "fs_deconverge",
+ "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_converge_red", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_converge_green", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_converge_blue", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_radial_converge_red", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_radial_converge_green", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_radial_converge_blue", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_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_guest_dims", "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
new file mode 100644
index 00000000000..fdbdb847146
--- /dev/null
+++ b/bgfx/effects/ntsc_decode.json
@@ -0,0 +1,35 @@
+{
+ "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_ntsc_decode",
+ "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_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 ] },
+ { "name": "u_o_value", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_scan_time", "type": "vec4", "values": [ 52.6, 0.0, 0.0, 0.0 ] },
+ { "name": "u_notch_width", "type": "vec4", "values": [ 2.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_y_freq_response", "type": "vec4", "values": [ 6.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_i_freq_response", "type": "vec4", "values": [ 1.2, 0.0, 0.0, 0.0 ] },
+ { "name": "u_q_freq_response", "type": "vec4", "values": [ 0.6, 0.0, 0.0, 0.0 ] },
+ { "name": "u_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_jitter_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }
+ ]
+} \ No newline at end of file
diff --git a/bgfx/effects/ntsc_encode.json b/bgfx/effects/ntsc_encode.json
new file mode 100644
index 00000000000..b0284799839
--- /dev/null
+++ b/bgfx/effects/ntsc_encode.json
@@ -0,0 +1,31 @@
+{
+ "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_ntsc_encode",
+ "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_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 ] },
+ { "name": "u_p_value", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_scan_time", "type": "vec4", "values": [ 52.6, 0.0, 0.0, 0.0 ] },
+ { "name": "u_jitter_amount", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] },
+ { "name": "u_jitter_offset", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }
+ ]
+} \ No newline at end of file
diff --git a/bgfx/shaders/dx11/fs_blit.bin b/bgfx/shaders/dx11/fs_blit.bin
new file mode 100644
index 00000000000..a85e820871c
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_color.bin b/bgfx/shaders/dx11/fs_color.bin
new file mode 100644
index 00000000000..0d67b7ae49a
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_deconverge.bin b/bgfx/shaders/dx11/fs_deconverge.bin
new file mode 100644
index 00000000000..16f2c569081
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_gui.bin b/bgfx/shaders/dx11/fs_gui.bin
new file mode 100644
index 00000000000..d7b1df5f758
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_ntsc.bin b/bgfx/shaders/dx11/fs_ntsc.bin
new file mode 100644
index 00000000000..5624d13ce66
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_ntsc.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_ntsc_decode.bin b/bgfx/shaders/dx11/fs_ntsc_decode.bin
new file mode 100644
index 00000000000..8b8c4806386
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_ntsc_encode.bin b/bgfx/shaders/dx11/fs_ntsc_encode.bin
new file mode 100644
index 00000000000..739ac01c72f
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_phosphor.bin b/bgfx/shaders/dx11/fs_phosphor.bin
new file mode 100644
index 00000000000..4de9fe2d94f
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_ratios.bin b/bgfx/shaders/dx11/fs_ratios.bin
new file mode 100644
index 00000000000..74aaff2e824
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_ratios.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_screen.bin b/bgfx/shaders/dx11/fs_screen.bin
new file mode 100644
index 00000000000..27b8da9aa5f
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_tint.bin b/bgfx/shaders/dx11/fs_tint.bin
new file mode 100644
index 00000000000..3c85a877510
--- /dev/null
+++ b/bgfx/shaders/dx11/fs_tint.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_blit.bin b/bgfx/shaders/dx11/vs_blit.bin
new file mode 100644
index 00000000000..c9df5a9aa19
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_color.bin b/bgfx/shaders/dx11/vs_color.bin
new file mode 100644
index 00000000000..f4162cb7460
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_deconverge.bin b/bgfx/shaders/dx11/vs_deconverge.bin
new file mode 100644
index 00000000000..1ff405263ad
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_gui.bin b/bgfx/shaders/dx11/vs_gui.bin
new file mode 100644
index 00000000000..38b6e0ca8ba
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_ntsc.bin b/bgfx/shaders/dx11/vs_ntsc.bin
new file mode 100644
index 00000000000..9d289b789dc
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_ntsc.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_ntsc_decode.bin b/bgfx/shaders/dx11/vs_ntsc_decode.bin
new file mode 100644
index 00000000000..523172676c5
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_ntsc_encode.bin b/bgfx/shaders/dx11/vs_ntsc_encode.bin
new file mode 100644
index 00000000000..f063fcbb7bc
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_phosphor.bin b/bgfx/shaders/dx11/vs_phosphor.bin
new file mode 100644
index 00000000000..3c73f85053e
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_ratios.bin b/bgfx/shaders/dx11/vs_ratios.bin
new file mode 100644
index 00000000000..2dfcd19c4cd
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_ratios.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_screen.bin b/bgfx/shaders/dx11/vs_screen.bin
new file mode 100644
index 00000000000..d4c1054ae31
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_tint.bin b/bgfx/shaders/dx11/vs_tint.bin
new file mode 100644
index 00000000000..2aa021d990d
--- /dev/null
+++ b/bgfx/shaders/dx11/vs_tint.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_blit.bin b/bgfx/shaders/dx9/fs_blit.bin
new file mode 100644
index 00000000000..6fb1c1216e5
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_color.bin b/bgfx/shaders/dx9/fs_color.bin
new file mode 100644
index 00000000000..5a2d8fade39
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_deconverge.bin b/bgfx/shaders/dx9/fs_deconverge.bin
new file mode 100644
index 00000000000..013c9d6654a
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_gui.bin b/bgfx/shaders/dx9/fs_gui.bin
new file mode 100644
index 00000000000..1f103798a98
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_ntsc.bin b/bgfx/shaders/dx9/fs_ntsc.bin
new file mode 100644
index 00000000000..1b9a7785023
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_ntsc.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_ntsc_decode.bin b/bgfx/shaders/dx9/fs_ntsc_decode.bin
new file mode 100644
index 00000000000..988dd059efa
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_ntsc_encode.bin b/bgfx/shaders/dx9/fs_ntsc_encode.bin
new file mode 100644
index 00000000000..754b52af0e4
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_phosphor.bin b/bgfx/shaders/dx9/fs_phosphor.bin
new file mode 100644
index 00000000000..0166bd2acfa
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_ratios.bin b/bgfx/shaders/dx9/fs_ratios.bin
new file mode 100644
index 00000000000..d9747d51c78
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_ratios.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_screen.bin b/bgfx/shaders/dx9/fs_screen.bin
new file mode 100644
index 00000000000..bbdf62903b4
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_tint.bin b/bgfx/shaders/dx9/fs_tint.bin
new file mode 100644
index 00000000000..ac548cf447e
--- /dev/null
+++ b/bgfx/shaders/dx9/fs_tint.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_blit.bin b/bgfx/shaders/dx9/vs_blit.bin
new file mode 100644
index 00000000000..c52010cac50
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_color.bin b/bgfx/shaders/dx9/vs_color.bin
new file mode 100644
index 00000000000..86fbcf81c37
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_deconverge.bin b/bgfx/shaders/dx9/vs_deconverge.bin
new file mode 100644
index 00000000000..856190c4d70
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_gui.bin b/bgfx/shaders/dx9/vs_gui.bin
new file mode 100644
index 00000000000..17b1f20ded0
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_ntsc.bin b/bgfx/shaders/dx9/vs_ntsc.bin
new file mode 100644
index 00000000000..ffafd21caeb
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_ntsc.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_ntsc_decode.bin b/bgfx/shaders/dx9/vs_ntsc_decode.bin
new file mode 100644
index 00000000000..4bb8a1481ed
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_ntsc_encode.bin b/bgfx/shaders/dx9/vs_ntsc_encode.bin
new file mode 100644
index 00000000000..48501754f93
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_phosphor.bin b/bgfx/shaders/dx9/vs_phosphor.bin
new file mode 100644
index 00000000000..6f14716a6ef
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_ratios.bin b/bgfx/shaders/dx9/vs_ratios.bin
new file mode 100644
index 00000000000..db1bb071902
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_ratios.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_screen.bin b/bgfx/shaders/dx9/vs_screen.bin
new file mode 100644
index 00000000000..2c891cce91a
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_tint.bin b/bgfx/shaders/dx9/vs_tint.bin
new file mode 100644
index 00000000000..c8b53d447d1
--- /dev/null
+++ b/bgfx/shaders/dx9/vs_tint.bin
Binary files differ
diff --git a/shaders/gles/fs_blit.bin b/bgfx/shaders/gles/fs_blit.bin
index 22e2f0c23d0..22e2f0c23d0 100644
--- a/shaders/gles/fs_blit.bin
+++ b/bgfx/shaders/gles/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/gles/fs_color.bin b/bgfx/shaders/gles/fs_color.bin
new file mode 100644
index 00000000000..aa4e13d03ae
--- /dev/null
+++ b/bgfx/shaders/gles/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/gles/fs_deconverge.bin b/bgfx/shaders/gles/fs_deconverge.bin
new file mode 100644
index 00000000000..33f2f66a503
--- /dev/null
+++ b/bgfx/shaders/gles/fs_deconverge.bin
Binary files differ
diff --git a/shaders/gles/fs_gui.bin b/bgfx/shaders/gles/fs_gui.bin
index 22e2f0c23d0..22e2f0c23d0 100644
--- a/shaders/gles/fs_gui.bin
+++ b/bgfx/shaders/gles/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/gles/fs_ntsc.bin b/bgfx/shaders/gles/fs_ntsc.bin
new file mode 100644
index 00000000000..7fa4e782c2b
--- /dev/null
+++ b/bgfx/shaders/gles/fs_ntsc.bin
Binary files differ
diff --git a/bgfx/shaders/gles/fs_ntsc_decode.bin b/bgfx/shaders/gles/fs_ntsc_decode.bin
new file mode 100644
index 00000000000..49458ff0b80
--- /dev/null
+++ b/bgfx/shaders/gles/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/gles/fs_ntsc_encode.bin b/bgfx/shaders/gles/fs_ntsc_encode.bin
new file mode 100644
index 00000000000..0d0bdbeea37
--- /dev/null
+++ b/bgfx/shaders/gles/fs_ntsc_encode.bin
Binary files differ
diff --git a/shaders/gles/fs_phosphor.bin b/bgfx/shaders/gles/fs_phosphor.bin
index 9ebdaa8f4ce..9ebdaa8f4ce 100644
--- a/shaders/gles/fs_phosphor.bin
+++ b/bgfx/shaders/gles/fs_phosphor.bin
Binary files differ
diff --git a/shaders/gles/fs_ratios.bin b/bgfx/shaders/gles/fs_ratios.bin
index 2f053c136f7..2f053c136f7 100644
--- a/shaders/gles/fs_ratios.bin
+++ b/bgfx/shaders/gles/fs_ratios.bin
Binary files differ
diff --git a/shaders/gles/fs_screen.bin b/bgfx/shaders/gles/fs_screen.bin
index 22e2f0c23d0..22e2f0c23d0 100644
--- a/shaders/gles/fs_screen.bin
+++ b/bgfx/shaders/gles/fs_screen.bin
Binary files differ
diff --git a/shaders/gles/fs_tint.bin b/bgfx/shaders/gles/fs_tint.bin
index 2e9ac7c950e..2e9ac7c950e 100644
--- a/shaders/gles/fs_tint.bin
+++ b/bgfx/shaders/gles/fs_tint.bin
Binary files differ
diff --git a/shaders/gles/vs_blit.bin b/bgfx/shaders/gles/vs_blit.bin
index 9dd618de8a0..9dd618de8a0 100644
--- a/shaders/gles/vs_blit.bin
+++ b/bgfx/shaders/gles/vs_blit.bin
Binary files differ
diff --git a/shaders/gles/vs_gui.bin b/bgfx/shaders/gles/vs_color.bin
index 9dd618de8a0..9dd618de8a0 100644
--- a/shaders/gles/vs_gui.bin
+++ b/bgfx/shaders/gles/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/gles/vs_deconverge.bin b/bgfx/shaders/gles/vs_deconverge.bin
new file mode 100644
index 00000000000..0918a47ccb8
--- /dev/null
+++ b/bgfx/shaders/gles/vs_deconverge.bin
Binary files differ
diff --git a/shaders/gles/vs_phosphor.bin b/bgfx/shaders/gles/vs_gui.bin
index 9dd618de8a0..9dd618de8a0 100644
--- a/shaders/gles/vs_phosphor.bin
+++ b/bgfx/shaders/gles/vs_gui.bin
Binary files differ
diff --git a/shaders/gles/vs_ratios.bin b/bgfx/shaders/gles/vs_ntsc.bin
index 9dd618de8a0..9dd618de8a0 100644
--- a/shaders/gles/vs_ratios.bin
+++ b/bgfx/shaders/gles/vs_ntsc.bin
Binary files differ
diff --git a/shaders/gles/vs_screen.bin b/bgfx/shaders/gles/vs_ntsc_decode.bin
index 9dd618de8a0..9dd618de8a0 100644
--- a/shaders/gles/vs_screen.bin
+++ b/bgfx/shaders/gles/vs_ntsc_decode.bin
Binary files differ
diff --git a/shaders/gles/vs_tint.bin b/bgfx/shaders/gles/vs_ntsc_encode.bin
index 9dd618de8a0..9dd618de8a0 100644
--- a/shaders/gles/vs_tint.bin
+++ b/bgfx/shaders/gles/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/gles/vs_phosphor.bin b/bgfx/shaders/gles/vs_phosphor.bin
new file mode 100644
index 00000000000..9dd618de8a0
--- /dev/null
+++ b/bgfx/shaders/gles/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/gles/vs_ratios.bin b/bgfx/shaders/gles/vs_ratios.bin
new file mode 100644
index 00000000000..9dd618de8a0
--- /dev/null
+++ b/bgfx/shaders/gles/vs_ratios.bin
Binary files differ
diff --git a/bgfx/shaders/gles/vs_screen.bin b/bgfx/shaders/gles/vs_screen.bin
new file mode 100644
index 00000000000..9dd618de8a0
--- /dev/null
+++ b/bgfx/shaders/gles/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/gles/vs_tint.bin b/bgfx/shaders/gles/vs_tint.bin
new file mode 100644
index 00000000000..9dd618de8a0
--- /dev/null
+++ b/bgfx/shaders/gles/vs_tint.bin
Binary files differ
diff --git a/shaders/glsl/fs_blit.bin b/bgfx/shaders/glsl/fs_blit.bin
index db0fe2b487b..db0fe2b487b 100644
--- a/shaders/glsl/fs_blit.bin
+++ b/bgfx/shaders/glsl/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/fs_color.bin b/bgfx/shaders/glsl/fs_color.bin
new file mode 100644
index 00000000000..6cf2162b523
--- /dev/null
+++ b/bgfx/shaders/glsl/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/fs_deconverge.bin b/bgfx/shaders/glsl/fs_deconverge.bin
new file mode 100644
index 00000000000..756c4da04af
--- /dev/null
+++ b/bgfx/shaders/glsl/fs_deconverge.bin
Binary files differ
diff --git a/shaders/glsl/fs_gui.bin b/bgfx/shaders/glsl/fs_gui.bin
index db0fe2b487b..db0fe2b487b 100644
--- a/shaders/glsl/fs_gui.bin
+++ b/bgfx/shaders/glsl/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/fs_ntsc.bin b/bgfx/shaders/glsl/fs_ntsc.bin
new file mode 100644
index 00000000000..c7db0275fa1
--- /dev/null
+++ b/bgfx/shaders/glsl/fs_ntsc.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/fs_ntsc_decode.bin b/bgfx/shaders/glsl/fs_ntsc_decode.bin
new file mode 100644
index 00000000000..59fdbb640ed
--- /dev/null
+++ b/bgfx/shaders/glsl/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/fs_ntsc_encode.bin b/bgfx/shaders/glsl/fs_ntsc_encode.bin
new file mode 100644
index 00000000000..7a11254d662
--- /dev/null
+++ b/bgfx/shaders/glsl/fs_ntsc_encode.bin
Binary files differ
diff --git a/shaders/glsl/fs_phosphor.bin b/bgfx/shaders/glsl/fs_phosphor.bin
index 5996130d730..5996130d730 100644
--- a/shaders/glsl/fs_phosphor.bin
+++ b/bgfx/shaders/glsl/fs_phosphor.bin
Binary files differ
diff --git a/shaders/glsl/fs_ratios.bin b/bgfx/shaders/glsl/fs_ratios.bin
index 7fea68ef815..7fea68ef815 100644
--- a/shaders/glsl/fs_ratios.bin
+++ b/bgfx/shaders/glsl/fs_ratios.bin
Binary files differ
diff --git a/shaders/glsl/fs_screen.bin b/bgfx/shaders/glsl/fs_screen.bin
index db0fe2b487b..db0fe2b487b 100644
--- a/shaders/glsl/fs_screen.bin
+++ b/bgfx/shaders/glsl/fs_screen.bin
Binary files differ
diff --git a/shaders/glsl/fs_tint.bin b/bgfx/shaders/glsl/fs_tint.bin
index 762a5dc2f4b..762a5dc2f4b 100644
--- a/shaders/glsl/fs_tint.bin
+++ b/bgfx/shaders/glsl/fs_tint.bin
Binary files differ
diff --git a/shaders/glsl/vs_blit.bin b/bgfx/shaders/glsl/vs_blit.bin
index af6c9349f41..af6c9349f41 100644
--- a/shaders/glsl/vs_blit.bin
+++ b/bgfx/shaders/glsl/vs_blit.bin
Binary files differ
diff --git a/shaders/glsl/vs_gui.bin b/bgfx/shaders/glsl/vs_color.bin
index af6c9349f41..af6c9349f41 100644
--- a/shaders/glsl/vs_gui.bin
+++ b/bgfx/shaders/glsl/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/vs_deconverge.bin b/bgfx/shaders/glsl/vs_deconverge.bin
new file mode 100644
index 00000000000..fbc57e9c8f8
--- /dev/null
+++ b/bgfx/shaders/glsl/vs_deconverge.bin
Binary files differ
diff --git a/shaders/glsl/vs_phosphor.bin b/bgfx/shaders/glsl/vs_gui.bin
index af6c9349f41..af6c9349f41 100644
--- a/shaders/glsl/vs_phosphor.bin
+++ b/bgfx/shaders/glsl/vs_gui.bin
Binary files differ
diff --git a/shaders/glsl/vs_ratios.bin b/bgfx/shaders/glsl/vs_ntsc.bin
index af6c9349f41..af6c9349f41 100644
--- a/shaders/glsl/vs_ratios.bin
+++ b/bgfx/shaders/glsl/vs_ntsc.bin
Binary files differ
diff --git a/shaders/glsl/vs_screen.bin b/bgfx/shaders/glsl/vs_ntsc_decode.bin
index af6c9349f41..af6c9349f41 100644
--- a/shaders/glsl/vs_screen.bin
+++ b/bgfx/shaders/glsl/vs_ntsc_decode.bin
Binary files differ
diff --git a/shaders/glsl/vs_tint.bin b/bgfx/shaders/glsl/vs_ntsc_encode.bin
index af6c9349f41..af6c9349f41 100644
--- a/shaders/glsl/vs_tint.bin
+++ b/bgfx/shaders/glsl/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/vs_phosphor.bin b/bgfx/shaders/glsl/vs_phosphor.bin
new file mode 100644
index 00000000000..af6c9349f41
--- /dev/null
+++ b/bgfx/shaders/glsl/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/vs_ratios.bin b/bgfx/shaders/glsl/vs_ratios.bin
new file mode 100644
index 00000000000..af6c9349f41
--- /dev/null
+++ b/bgfx/shaders/glsl/vs_ratios.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/vs_screen.bin b/bgfx/shaders/glsl/vs_screen.bin
new file mode 100644
index 00000000000..af6c9349f41
--- /dev/null
+++ b/bgfx/shaders/glsl/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/vs_tint.bin b/bgfx/shaders/glsl/vs_tint.bin
new file mode 100644
index 00000000000..af6c9349f41
--- /dev/null
+++ b/bgfx/shaders/glsl/vs_tint.bin
Binary files differ
diff --git a/shaders/metal/fs_blit.bin b/bgfx/shaders/metal/fs_blit.bin
index 6a3da392480..6a3da392480 100644
--- a/shaders/metal/fs_blit.bin
+++ b/bgfx/shaders/metal/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/metal/fs_color.bin b/bgfx/shaders/metal/fs_color.bin
new file mode 100644
index 00000000000..f8009011b2d
--- /dev/null
+++ b/bgfx/shaders/metal/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/metal/fs_deconverge.bin b/bgfx/shaders/metal/fs_deconverge.bin
new file mode 100644
index 00000000000..296ba02f99f
--- /dev/null
+++ b/bgfx/shaders/metal/fs_deconverge.bin
Binary files differ
diff --git a/shaders/metal/fs_gui.bin b/bgfx/shaders/metal/fs_gui.bin
index 6a3da392480..6a3da392480 100644
--- a/shaders/metal/fs_gui.bin
+++ b/bgfx/shaders/metal/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/metal/fs_ntsc.bin b/bgfx/shaders/metal/fs_ntsc.bin
new file mode 100644
index 00000000000..47267c922b6
--- /dev/null
+++ b/bgfx/shaders/metal/fs_ntsc.bin
Binary files differ
diff --git a/bgfx/shaders/metal/fs_ntsc_decode.bin b/bgfx/shaders/metal/fs_ntsc_decode.bin
new file mode 100644
index 00000000000..22787c6ef21
--- /dev/null
+++ b/bgfx/shaders/metal/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/metal/fs_ntsc_encode.bin b/bgfx/shaders/metal/fs_ntsc_encode.bin
new file mode 100644
index 00000000000..179129f0e95
--- /dev/null
+++ b/bgfx/shaders/metal/fs_ntsc_encode.bin
Binary files differ
diff --git a/shaders/metal/fs_phosphor.bin b/bgfx/shaders/metal/fs_phosphor.bin
index 5cf08944c95..5cf08944c95 100644
--- a/shaders/metal/fs_phosphor.bin
+++ b/bgfx/shaders/metal/fs_phosphor.bin
Binary files differ
diff --git a/shaders/metal/fs_ratios.bin b/bgfx/shaders/metal/fs_ratios.bin
index 1c36f16eccd..1c36f16eccd 100644
--- a/shaders/metal/fs_ratios.bin
+++ b/bgfx/shaders/metal/fs_ratios.bin
Binary files differ
diff --git a/shaders/metal/fs_screen.bin b/bgfx/shaders/metal/fs_screen.bin
index 6a3da392480..6a3da392480 100644
--- a/shaders/metal/fs_screen.bin
+++ b/bgfx/shaders/metal/fs_screen.bin
Binary files differ
diff --git a/shaders/metal/fs_tint.bin b/bgfx/shaders/metal/fs_tint.bin
index 3168babec2c..3168babec2c 100644
--- a/shaders/metal/fs_tint.bin
+++ b/bgfx/shaders/metal/fs_tint.bin
Binary files differ
diff --git a/shaders/metal/vs_blit.bin b/bgfx/shaders/metal/vs_blit.bin
index 122b7dee5c3..122b7dee5c3 100644
--- a/shaders/metal/vs_blit.bin
+++ b/bgfx/shaders/metal/vs_blit.bin
Binary files differ
diff --git a/shaders/metal/vs_gui.bin b/bgfx/shaders/metal/vs_color.bin
index 122b7dee5c3..122b7dee5c3 100644
--- a/shaders/metal/vs_gui.bin
+++ b/bgfx/shaders/metal/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/metal/vs_deconverge.bin b/bgfx/shaders/metal/vs_deconverge.bin
new file mode 100644
index 00000000000..27445eb6010
--- /dev/null
+++ b/bgfx/shaders/metal/vs_deconverge.bin
Binary files differ
diff --git a/shaders/metal/vs_phosphor.bin b/bgfx/shaders/metal/vs_gui.bin
index 122b7dee5c3..122b7dee5c3 100644
--- a/shaders/metal/vs_phosphor.bin
+++ b/bgfx/shaders/metal/vs_gui.bin
Binary files differ
diff --git a/shaders/metal/vs_ratios.bin b/bgfx/shaders/metal/vs_ntsc.bin
index 122b7dee5c3..122b7dee5c3 100644
--- a/shaders/metal/vs_ratios.bin
+++ b/bgfx/shaders/metal/vs_ntsc.bin
Binary files differ
diff --git a/shaders/metal/vs_screen.bin b/bgfx/shaders/metal/vs_ntsc_decode.bin
index 122b7dee5c3..122b7dee5c3 100644
--- a/shaders/metal/vs_screen.bin
+++ b/bgfx/shaders/metal/vs_ntsc_decode.bin
Binary files differ
diff --git a/shaders/metal/vs_tint.bin b/bgfx/shaders/metal/vs_ntsc_encode.bin
index 122b7dee5c3..122b7dee5c3 100644
--- a/shaders/metal/vs_tint.bin
+++ b/bgfx/shaders/metal/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/metal/vs_phosphor.bin b/bgfx/shaders/metal/vs_phosphor.bin
new file mode 100644
index 00000000000..122b7dee5c3
--- /dev/null
+++ b/bgfx/shaders/metal/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/metal/vs_ratios.bin b/bgfx/shaders/metal/vs_ratios.bin
new file mode 100644
index 00000000000..122b7dee5c3
--- /dev/null
+++ b/bgfx/shaders/metal/vs_ratios.bin
Binary files differ
diff --git a/bgfx/shaders/metal/vs_screen.bin b/bgfx/shaders/metal/vs_screen.bin
new file mode 100644
index 00000000000..122b7dee5c3
--- /dev/null
+++ b/bgfx/shaders/metal/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/metal/vs_tint.bin b/bgfx/shaders/metal/vs_tint.bin
new file mode 100644
index 00000000000..122b7dee5c3
--- /dev/null
+++ b/bgfx/shaders/metal/vs_tint.bin
Binary files differ
diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua
index 85d8468be90..9997f44d9fc 100644
--- a/scripts/src/osd/modules.lua
+++ b/scripts/src/osd/modules.lua
@@ -132,8 +132,9 @@ function osdmodulesbuild()
MAME_DIR .. "src/osd/modules/render/bgfx/effectreader.cpp",
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/parameter.cpp",
+ MAME_DIR .. "src/osd/modules/render/bgfx/frameparameter.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",
MAME_DIR .. "src/osd/modules/render/bgfx/slider.cpp",
MAME_DIR .. "src/osd/modules/render/bgfx/sliderreader.cpp",
diff --git a/shaders/dx11/fs_blit.bin b/shaders/dx11/fs_blit.bin
deleted file mode 100644
index 80d85fb1107..00000000000
--- a/shaders/dx11/fs_blit.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/fs_gui.bin b/shaders/dx11/fs_gui.bin
deleted file mode 100644
index 80d85fb1107..00000000000
--- a/shaders/dx11/fs_gui.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/fs_phosphor.bin b/shaders/dx11/fs_phosphor.bin
deleted file mode 100644
index ad1523baf07..00000000000
--- a/shaders/dx11/fs_phosphor.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/fs_ratios.bin b/shaders/dx11/fs_ratios.bin
deleted file mode 100644
index 2df1e3de93f..00000000000
--- a/shaders/dx11/fs_ratios.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/fs_screen.bin b/shaders/dx11/fs_screen.bin
deleted file mode 100644
index 80d85fb1107..00000000000
--- a/shaders/dx11/fs_screen.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/fs_tint.bin b/shaders/dx11/fs_tint.bin
deleted file mode 100644
index b18fd93ed9e..00000000000
--- a/shaders/dx11/fs_tint.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/vs_blit.bin b/shaders/dx11/vs_blit.bin
deleted file mode 100644
index b0bebf9da4c..00000000000
--- a/shaders/dx11/vs_blit.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/vs_gui.bin b/shaders/dx11/vs_gui.bin
deleted file mode 100644
index b0bebf9da4c..00000000000
--- a/shaders/dx11/vs_gui.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/vs_phosphor.bin b/shaders/dx11/vs_phosphor.bin
deleted file mode 100644
index b0bebf9da4c..00000000000
--- a/shaders/dx11/vs_phosphor.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/vs_ratios.bin b/shaders/dx11/vs_ratios.bin
deleted file mode 100644
index b0bebf9da4c..00000000000
--- a/shaders/dx11/vs_ratios.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/vs_screen.bin b/shaders/dx11/vs_screen.bin
deleted file mode 100644
index b0bebf9da4c..00000000000
--- a/shaders/dx11/vs_screen.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx11/vs_tint.bin b/shaders/dx11/vs_tint.bin
deleted file mode 100644
index b0bebf9da4c..00000000000
--- a/shaders/dx11/vs_tint.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/fs_blit.bin b/shaders/dx9/fs_blit.bin
deleted file mode 100644
index ee2b018cae8..00000000000
--- a/shaders/dx9/fs_blit.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/fs_gui.bin b/shaders/dx9/fs_gui.bin
deleted file mode 100644
index ee2b018cae8..00000000000
--- a/shaders/dx9/fs_gui.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/fs_phosphor.bin b/shaders/dx9/fs_phosphor.bin
deleted file mode 100644
index 4efb78ecae0..00000000000
--- a/shaders/dx9/fs_phosphor.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/fs_ratios.bin b/shaders/dx9/fs_ratios.bin
deleted file mode 100644
index 8bd9eed37bb..00000000000
--- a/shaders/dx9/fs_ratios.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/fs_screen.bin b/shaders/dx9/fs_screen.bin
deleted file mode 100644
index ee2b018cae8..00000000000
--- a/shaders/dx9/fs_screen.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/fs_tint.bin b/shaders/dx9/fs_tint.bin
deleted file mode 100644
index ff099cbab0c..00000000000
--- a/shaders/dx9/fs_tint.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/vs_blit.bin b/shaders/dx9/vs_blit.bin
deleted file mode 100644
index c071222605b..00000000000
--- a/shaders/dx9/vs_blit.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/vs_gui.bin b/shaders/dx9/vs_gui.bin
deleted file mode 100644
index c071222605b..00000000000
--- a/shaders/dx9/vs_gui.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/vs_phosphor.bin b/shaders/dx9/vs_phosphor.bin
deleted file mode 100644
index c071222605b..00000000000
--- a/shaders/dx9/vs_phosphor.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/vs_ratios.bin b/shaders/dx9/vs_ratios.bin
deleted file mode 100644
index c071222605b..00000000000
--- a/shaders/dx9/vs_ratios.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/vs_screen.bin b/shaders/dx9/vs_screen.bin
deleted file mode 100644
index c071222605b..00000000000
--- a/shaders/dx9/vs_screen.bin
+++ /dev/null
Binary files differ
diff --git a/shaders/dx9/vs_tint.bin b/shaders/dx9/vs_tint.bin
deleted file mode 100644
index c071222605b..00000000000
--- a/shaders/dx9/vs_tint.bin
+++ /dev/null
Binary files differ
diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp
index 5cb7cb85da4..8a0d0f86107 100644
--- a/src/osd/modules/lib/osdobj_common.cpp
+++ b/src/osd/modules/lib/osdobj_common.cpp
@@ -141,7 +141,11 @@ const options_entry osd_options::s_option_entries[] =
{ OSDOPTION_AUDIO_EFFECT "9", OSDOPTVAL_NONE, OPTION_STRING, "AudioUnit effect 9" },
#endif
- // End of list
+ { 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" },
+
+ // End of list
{ nullptr }
};
diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h
index 592391b5161..652ae8d6cfc 100644
--- a/src/osd/modules/lib/osdobj_common.h
+++ b/src/osd/modules/lib/osdobj_common.h
@@ -78,7 +78,8 @@
#define OSDOPTVAL_AUTO "auto"
#define OSDOPTVAL_NONE "none"
-
+#define OSDOPTION_BGFX_PATH "bgfx_path"
+#define OSDOPTION_BGFX_SCREEN_CHAIN "screen_chain"
//============================================================
// TYPE DEFINITIONS
@@ -149,6 +150,10 @@ public:
const char *audio_output() const { return value(OSDOPTION_AUDIO_OUTPUT); }
const char *audio_effect(int index) const { return value(string_format("%s%d", OSDOPTION_AUDIO_EFFECT, index).c_str()); }
+ // 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); }
+
private:
static const options_entry s_option_entries[];
};
diff --git a/src/osd/modules/render/bgfx/chainentry.cpp b/src/osd/modules/render/bgfx/chainentry.cpp
index 3a9d4248691..9b7d1674fb6 100644
--- a/src/osd/modules/render/bgfx/chainentry.cpp
+++ b/src/osd/modules/render/bgfx/chainentry.cpp
@@ -27,10 +27,10 @@
bgfx_chain_entry::bgfx_chain_entry(std::string name, bgfx_effect* effect, std::vector<bgfx_suppressor*> suppressors, std::vector<bgfx_input_pair> inputs, std::vector<bgfx_entry_uniform*> uniforms, bgfx_target* output)
: m_name(name)
, m_effect(effect)
- , m_inputs(inputs)
, m_suppressors(suppressors)
- , m_output(output)
+ , m_inputs(inputs)
, m_uniforms(uniforms)
+ , m_output(output)
{
}
@@ -58,6 +58,39 @@ 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)
+ {
+ float values[2];
+ float width = screen_width;
+ float height = screen_height;
+ if (m_inputs.size() > 0)
+ {
+ 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);
+ }
+
+ bgfx_uniform* quad_dims = m_effect->uniform("u_quad_dims");
+ if (quad_dims != nullptr)
+ {
+ float values[2];
+ values[0] = prim->bounds.x1 - prim->bounds.x0;
+ values[1] = prim->bounds.y1 - prim->bounds.y0;
+ quad_dims->set(values, sizeof(float) * 2);
+ }
+
+ bgfx_uniform* guest_dims = m_effect->uniform("u_guest_dims");
+ if (guest_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);
+ }
for (bgfx_entry_uniform* uniform : m_uniforms)
{
uniform->bind();
@@ -159,13 +192,27 @@ bool bgfx_chain_entry::skip()
return false;
}
+ // Group all AND/OR'd results together and OR them together (hack for now)
+ // TODO: Make this a bit more logical
+
+ bool or_suppress = false;
+ int and_count = 0;
+ int and_suppressed = 0;
for (bgfx_suppressor* suppressor : m_suppressors)
{
- if (suppressor->suppress())
+ if (suppressor->combine() == bgfx_suppressor::combine_mode::COMBINE_AND)
+ {
+ and_count++;
+ if (suppressor->suppress())
+ {
+ and_suppressed++;
+ }
+ }
+ else if (suppressor->combine() == bgfx_suppressor::combine_mode::COMBINE_OR)
{
- return true;
+ or_suppress |= suppressor->suppress();
}
}
- return false;
+ return (and_count != 0 && and_suppressed == and_count) || or_suppress;
} \ No newline at end of file
diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp
index 1f856ec2d8c..5e4c9b2de9d 100644
--- a/src/osd/modules/render/bgfx/chainentryreader.cpp
+++ b/src/osd/modules/render/bgfx/chainentryreader.cpp
@@ -23,7 +23,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<std::string, bgfx_slider*>& sliders)
+bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, std::map<std::string, bgfx_slider*>& sliders, std::map<std::string, bgfx_parameter*>& params)
{
validate_parameters(value);
@@ -49,7 +49,7 @@ bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, textur
const Value& uniform_array = value["uniforms"];
for (UINT32 i = 0; i < uniform_array.Size(); i++)
{
- uniforms.push_back(entry_uniform_reader::read_from_value(uniform_array[i], effect, sliders));
+ uniforms.push_back(entry_uniform_reader::read_from_value(uniform_array[i], effect, sliders, params));
}
}
diff --git a/src/osd/modules/render/bgfx/chainentryreader.h b/src/osd/modules/render/bgfx/chainentryreader.h
index 9c6ca979bf4..bb2501bf039 100644
--- a/src/osd/modules/render/bgfx/chainentryreader.h
+++ b/src/osd/modules/render/bgfx/chainentryreader.h
@@ -20,11 +20,12 @@ class texture_manager;
class target_manager;
class effect_manager;
class bgfx_slider;
+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<std::string, bgfx_slider*>& sliders);
+ static bgfx_chain_entry* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, std::map<std::string, bgfx_slider*>& sliders, std::map<std::string, bgfx_parameter*>& 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 09383ae08ad..cea272c0049 100644
--- a/src/osd/modules/render/bgfx/chainmanager.cpp
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -31,20 +31,20 @@ chain_manager::~chain_manager()
m_chains.clear();
}
-bgfx_chain* chain_manager::chain(std::string name, running_machine& machine)
+bgfx_chain* chain_manager::chain(std::string name, running_machine& machine, uint32_t window_index)
{
- std::map<std::string, bgfx_chain*>::iterator iter = m_chains.find(name);
+ std::map<std::string, bgfx_chain*>::iterator iter = m_chains.find(name + std::to_string(window_index));
if (iter != m_chains.end())
{
return iter->second;
}
- return load_chain(name, machine);
+ return load_chain(name, machine, window_index);
}
-bgfx_chain* chain_manager::load_chain(std::string name, running_machine& machine)
+bgfx_chain* chain_manager::load_chain(std::string name, running_machine& machine, uint32_t window_index)
{
- std::string path = "bgfx/chains/" + name + ".json";
+ std::string path = std::string(m_options.bgfx_path()) + "/chains/" + name + ".json";
bx::CrtFileReader reader;
bx::open(&reader, path.c_str());
@@ -58,9 +58,9 @@ 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, m_textures, m_targets, m_effects, m_width, m_height);
+ bgfx_chain* chain = chain_reader::read_from_value(document, machine, window_index, m_textures, m_targets, m_effects, m_width, m_height);
- m_chains[name] = chain;
+ m_chains[name + std::to_string(window_index)] = chain;
return chain;
}
diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h
index e4527cd81c0..4f413459d37 100644
--- a/src/osd/modules/render/bgfx/chainmanager.h
+++ b/src/osd/modules/render/bgfx/chainmanager.h
@@ -27,8 +27,9 @@ class bgfx_chain;
class chain_manager {
public:
- chain_manager(texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t width, uint32_t height)
- : m_textures(textures)
+ chain_manager(osd_options& options, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t width, uint32_t height)
+ : m_options(options)
+ , m_textures(textures)
, m_targets(targets)
, m_effects(effects)
, m_width(width)
@@ -38,11 +39,12 @@ public:
~chain_manager();
// Getters
- bgfx_chain* chain(std::string name, running_machine& machine);
+ bgfx_chain* chain(std::string name, running_machine& machine, uint32_t window_index);
private:
- bgfx_chain* load_chain(std::string name, running_machine& machine);
+ bgfx_chain* load_chain(std::string name, running_machine& machine, uint32_t window_index);
+ osd_options& m_options;
texture_manager& m_textures;
target_manager& m_targets;
effect_manager& m_effects;
diff --git a/src/osd/modules/render/bgfx/chainreader.cpp b/src/osd/modules/render/bgfx/chainreader.cpp
index 00eb77eaa59..84868e19237 100644
--- a/src/osd/modules/render/bgfx/chainreader.cpp
+++ b/src/osd/modules/render/bgfx/chainreader.cpp
@@ -20,6 +20,7 @@
#include "chainreader.h"
#include "target.h"
#include "slider.h"
+#include "parameter.h"
const chain_reader::string_to_enum chain_reader::STYLE_NAMES[chain_reader::STYLE_COUNT] = {
{ "guest", TARGET_STYLE_GUEST },
@@ -27,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, 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, 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);
@@ -63,10 +64,17 @@ bgfx_chain* chain_reader::read_from_value(const Value& value, running_machine& m
const Value& param_array = value["parameters"];
for (UINT32 i = 0; i < param_array.Size(); i++)
{
- parameters.push_back(parameter_reader::read_from_value(param_array[i]));
+ parameters.push_back(parameter_reader::read_from_value(param_array[i], window_index));
}
}
+ // Map parameters
+ std::map<std::string, bgfx_parameter*> param_map;
+ for (bgfx_parameter* param : parameters)
+ {
+ param_map[param->name()] = param;
+ }
+
// Create targets
if (value.HasMember("targets"))
{
@@ -121,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));
+ entries.push_back(chain_entry_reader::read_from_value(entry_array[i], 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 ed584a06105..76c696868cb 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, 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, 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/effect.h b/src/osd/modules/render/bgfx/effect.h
index 80fd6fc454f..8c1c3c4f617 100644
--- a/src/osd/modules/render/bgfx/effect.h
+++ b/src/osd/modules/render/bgfx/effect.h
@@ -26,7 +26,6 @@ public:
void submit(int view, uint64_t blend = 0L);
bgfx_uniform* uniform(std::string name);
- bool has_uniform(std::string name);
private:
uint64_t m_state;
diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp
index ed10e600a42..f86afc6719a 100644
--- a/src/osd/modules/render/bgfx/effectmanager.cpp
+++ b/src/osd/modules/render/bgfx/effectmanager.cpp
@@ -46,7 +46,7 @@ bgfx_effect* effect_manager::effect(std::string name)
bgfx_effect* effect_manager::load_effect(std::string name)
{
- std::string path = "bgfx/effects/" + name + ".json";
+ std::string path = std::string(m_options.bgfx_path()) + "/effects/" + name + ".json";
bx::CrtFileReader reader;
bx::open(&reader, path.c_str());
diff --git a/src/osd/modules/render/bgfx/effectmanager.h b/src/osd/modules/render/bgfx/effectmanager.h
index e3d1666d26e..476d00ba62a 100644
--- a/src/osd/modules/render/bgfx/effectmanager.h
+++ b/src/osd/modules/render/bgfx/effectmanager.h
@@ -25,7 +25,7 @@ class bgfx_effect;
class effect_manager {
public:
- effect_manager(shader_manager& shaders) : m_shaders(shaders) { }
+ effect_manager(osd_options& options, shader_manager& shaders) : m_options(options), m_shaders(shaders) { }
~effect_manager();
// Getters
@@ -34,6 +34,7 @@ public:
private:
bgfx_effect* load_effect(std::string name);
+ osd_options& m_options;
shader_manager& m_shaders;
std::map<std::string, bgfx_effect*> m_effects;
};
diff --git a/src/osd/modules/render/bgfx/entryuniformreader.cpp b/src/osd/modules/render/bgfx/entryuniformreader.cpp
index 483406fdecc..8bac8399292 100644
--- a/src/osd/modules/render/bgfx/entryuniformreader.cpp
+++ b/src/osd/modules/render/bgfx/entryuniformreader.cpp
@@ -12,13 +12,17 @@
#include "effect.h"
#include "slideruniformreader.h"
#include "valueuniformreader.h"
+#include "paramuniform.h"
#include "uniform.h"
-bgfx_entry_uniform* entry_uniform_reader::read_from_value(const Value& value, bgfx_effect* effect, std::map<std::string, bgfx_slider*>& sliders)
+bgfx_entry_uniform* entry_uniform_reader::read_from_value(const Value& value, bgfx_effect* effect, std::map<std::string, bgfx_slider*>& sliders, std::map<std::string, bgfx_parameter*>& params)
{
validate_parameters(value);
- bgfx_uniform* uniform = effect->uniform(value["uniform"].GetString());
+ std::string name = value["uniform"].GetString();
+ bgfx_uniform* uniform = effect->uniform(name);
+
+ assert(uniform != nullptr);
if (value.HasMember("slider"))
{
@@ -28,6 +32,10 @@ bgfx_entry_uniform* entry_uniform_reader::read_from_value(const Value& value, bg
{
return value_uniform_reader::read_from_value(value, uniform);
}
+ else if (value.HasMember("parameter"))
+ {
+ return new bgfx_param_uniform(uniform, params[value["parameter"].GetString()]);
+ }
return nullptr;
}
diff --git a/src/osd/modules/render/bgfx/entryuniformreader.h b/src/osd/modules/render/bgfx/entryuniformreader.h
index a254a3d187c..ae9e5535594 100644
--- a/src/osd/modules/render/bgfx/entryuniformreader.h
+++ b/src/osd/modules/render/bgfx/entryuniformreader.h
@@ -19,11 +19,12 @@
class bgfx_entry_uniform;
class bgfx_slider;
class bgfx_effect;
+class bgfx_parameter;
class entry_uniform_reader : public state_reader
{
public:
- static bgfx_entry_uniform* read_from_value(const Value& value, bgfx_effect* effect, std::map<std::string, bgfx_slider*>& sliders);
+ static bgfx_entry_uniform* read_from_value(const Value& value, bgfx_effect* effect, std::map<std::string, bgfx_slider*>& sliders, std::map<std::string, bgfx_parameter*>& params);
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
new file mode 100644
index 00000000000..9febb7ae128
--- /dev/null
+++ b/src/osd/modules/render/bgfx/frameparameter.cpp
@@ -0,0 +1,26 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//============================================================
+//
+// frameparameter.cpp - Frame-based dynamic shader param
+//
+//============================================================
+
+#include "frameparameter.h"
+
+bgfx_frame_parameter::bgfx_frame_parameter(std::string name, parameter_type type, uint32_t period)
+ : bgfx_parameter(name, type)
+ , m_period(period)
+{
+}
+
+float bgfx_frame_parameter::value()
+{
+ return float(m_current_frame);
+}
+
+void bgfx_frame_parameter::tick(float /*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
new file mode 100644
index 00000000000..f1ec9d64abc
--- /dev/null
+++ b/src/osd/modules/render/bgfx/frameparameter.h
@@ -0,0 +1,34 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//============================================================
+//
+// frameparameter.cpp - Frame-based dynamic shader param
+//
+//============================================================
+
+#pragma once
+
+#ifndef __DRAWBGFX_FRAME_PARAMETER__
+#define __DRAWBGFX_FRAME_PARAMETER__
+
+#include <bgfx/bgfx.h>
+
+#include <string>
+
+#include "parameter.h"
+
+class bgfx_frame_parameter : public bgfx_parameter
+{
+public:
+ bgfx_frame_parameter(std::string name, parameter_type type, uint32_t period);
+ virtual ~bgfx_frame_parameter() { }
+
+ virtual float value() override;
+ virtual void tick(float delta) override;
+
+private:
+ uint32_t m_current_frame;
+ uint32_t m_period;
+};
+
+#endif // __DRAWBGFX_FRAME_PARAMETER__
diff --git a/src/osd/modules/render/bgfx/fs_color.sc b/src/osd/modules/render/bgfx/fs_color.sc
new file mode 100644
index 00000000000..8ee80110440
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_color.sc
@@ -0,0 +1,53 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz,ImJezze
+//-----------------------------------------------------------------------------
+// Color Convolution Effect
+//-----------------------------------------------------------------------------
+
+// NB: intentionally wasteful of uniforms in order for easier slider utilization
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+uniform vec4 u_red_ratios;
+uniform vec4 u_grn_ratios;
+uniform vec4 u_blu_ratios;
+uniform vec4 u_offset;
+uniform vec4 u_scale;
+uniform vec4 u_saturation;
+
+#define RedRatios u_red_ratios.xyz
+#define GrnRatios u_grn_ratios.xyz
+#define BluRatios u_blu_ratios.xyz
+#define Offset u_offset.xyz
+#define Scale u_scale.xyz
+#define Saturation u_saturation.x
+
+uniform vec4 u_texsize;
+uniform vec4 u_screenrect;
+
+SAMPLER2D(DiffuseSampler, 0);
+
+void main()
+{
+ vec4 BaseTexel = texture2D(DiffuseSampler, v_texcoord0);
+
+ vec3 OutRGB = BaseTexel.rgb;
+
+ // RGB Tint & Shift
+ float ShiftedRed = dot(OutRGB, RedRatios);
+ float ShiftedGrn = dot(OutRGB, GrnRatios);
+ float ShiftedBlu = dot(OutRGB, BluRatios);
+
+ // RGB Scale & Offset
+ vec3 OutTexel = vec3(ShiftedRed, ShiftedGrn, ShiftedBlu) * Scale + Offset;
+
+ // Saturation
+ vec3 Grayscale = vec3(0.299, 0.587, 0.114);
+ float OutLuma = dot(OutTexel, Grayscale);
+ vec3 OutChroma = OutTexel - OutLuma;
+ vec3 Saturated = OutLuma + OutChroma * Saturation;
+
+ gl_FragColor = vec4(Saturated, BaseTexel.a);
+}
diff --git a/src/osd/modules/render/bgfx/fs_deconverge.sc b/src/osd/modules/render/bgfx/fs_deconverge.sc
new file mode 100644
index 00000000000..343896cec2c
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_deconverge.sc
@@ -0,0 +1,21 @@
+$input v_color0, v_texcoord0, v_texcoord1, v_texcoord2
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz,ImJezze
+//-----------------------------------------------------------------------------
+// Deconvergence Effect
+//-----------------------------------------------------------------------------
+
+// NB: intentionally wasteful of uniforms in order for easier slider utilization
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+SAMPLER2D(DiffuseSampler, 0);
+
+void main()
+{
+ float r = texture2D(DiffuseSampler, v_texcoord0).r;
+ float g = texture2D(DiffuseSampler, v_texcoord1).g;
+ float b = texture2D(DiffuseSampler, v_texcoord2).b;
+ gl_FragColor = vec4(r, g, b, 1.0) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/fs_ntsc_decode.sc b/src/osd/modules/render/bgfx/fs_ntsc_decode.sc
new file mode 100644
index 00000000000..fa40850ff58
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_ntsc_decode.sc
@@ -0,0 +1,135 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz,ImJezze
+//-----------------------------------------------------------------------------
+// NTSC Decode Effect
+//-----------------------------------------------------------------------------
+
+// NB: intentionally wasteful of uniforms in order for easier slider utilization
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+uniform vec4 u_a_value;
+uniform vec4 u_b_value;
+uniform vec4 u_cc_value;
+uniform vec4 u_o_value;
+uniform vec4 u_scan_time;
+uniform vec4 u_notch_width;
+uniform vec4 u_y_freq_response;
+uniform vec4 u_i_freq_response;
+uniform vec4 u_q_freq_response;
+uniform vec4 u_jitter_amount;
+uniform vec4 u_jitter_offset;
+
+uniform vec4 u_texsize;
+uniform vec4 u_screenrect;
+
+SAMPLER2D(DiffuseSampler, 0);
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+const vec4 PI = vec4(3.1415927, 3.1415927, 3.1415927, 3.1415927);
+const vec4 PI2 = vec4(6.2831854, 6.2831854, 6.2831854, 6.2831854);
+
+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);
+
+const vec3 RDot = vec3(1.0, 0.956, 0.621);
+const vec3 GDot = vec3(1.0, -0.272, -0.647);
+const vec3 BDot = vec3(1.0, -1.106, 1.703);
+
+const vec4 OffsetX = vec4(0.0, 0.25, 0., 0.75);
+const vec4 NotchOffset = vec4(0.0, 1.0, 2.0, 3.0);
+
+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 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;
+ vec4 Fc_y3 = u_y_freq_response.xxxx * TimePerSample;
+ vec4 Fc_i = u_i_freq_response.xxxx * TimePerSample;
+ vec4 Fc_q = u_q_freq_response.xxxx * TimePerSample;
+ vec4 Fc_i_2 = Fc_i * two;
+ vec4 Fc_q_2 = Fc_q * two;
+
+ vec4 W = PI2 * u_cc_value.xxxx * u_scan_time.xxxx;
+ 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 YAccum = zero;
+ vec4 IAccum = zero;
+ vec4 QAccum = zero;
+
+ vec4 Cy = v_texcoord0.yyyy;
+ vec4 VPosition = vec4(Cy / u_screenrect.y);
+
+ vec4 i = zero;
+ /* for (int i = 0; i < 64; i = i + 4) */
+ /* { &*/
+ // float n = i - 32.0;
+ // vec4 n4 = vec4(n, n, n, n) + NotchOffset;
+ vec4 n4 = i + NotchOffset;
+
+ vec4 Cx = v_texcoord0.xxxx + SourceTexelDims.xxxx * (n4 * quarter);
+ vec4 HPosition = Cx / u_screenrect.xxxx;
+
+ vec4 C = texture2D(DiffuseSampler, vec2(Cx.x, Cy.x));
+
+ vec4 T = HPosition + HOffset + VPosition * 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);
+
+ vec4 SincYIn1 = Fc_y1 * PI2 * n4;
+ vec4 SincYIn2 = Fc_y2 * PI2 * n4;
+ vec4 SincYIn3 = Fc_y3 * PI2 * n4;
+ vec4 SincIIn = Fc_i * PI2 * n4;
+ vec4 SincQIn = Fc_q * PI2 * n4;
+
+ vec4 SincY1 = SincYIn1 != zero ? sin(SincYIn1) / SincYIn1 : one;
+ vec4 SincY2 = SincYIn2 != zero ? sin(SincYIn2) / SincYIn2 : one;
+ vec4 SincY3 = SincYIn3 != zero ? sin(SincYIn3) / SincYIn3 : one;
+
+ vec4 IdealY = (Fc_y1 * two * SincY1 - Fc_y2 * two * SincY2) + Fc_y3 * two * SincY3;
+ vec4 IdealI = Fc_i_2 * (SincIIn != zero ? sin(SincIIn) / SincIIn : one);
+ vec4 IdealQ = Fc_q_2 * (SincQIn != zero ? sin(SincIIn) / SincIIn : one);
+
+ vec4 FilterY = SincKernel * IdealY;
+ vec4 FilterI = SincKernel * IdealI;
+ vec4 FilterQ = SincKernel * IdealQ;
+
+ YAccum = YAccum + C * FilterY;
+ IAccum = IAccum + C * cos(WT) * FilterI;
+ QAccum = QAccum + C * sin(WT) * FilterQ;
+ /* } */
+
+ vec3 YIQ = vec3(
+ (YAccum.r + YAccum.g + YAccum.b + YAccum.a),
+ (IAccum.r + IAccum.g + IAccum.b + IAccum.a) * 2.0,
+ (QAccum.r + QAccum.g + QAccum.b + QAccum.a) * 2.0);
+
+ vec3 RGB = vec3(
+ dot(YIQ, RDot),
+ dot(YIQ, GDot),
+ dot(YIQ, BDot));
+
+ gl_FragColor = vec4(RGB, BaseTexel.a) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/fs_ntsc_encode.sc b/src/osd/modules/render/bgfx/fs_ntsc_encode.sc
new file mode 100644
index 00000000000..5cf8a8ada26
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_ntsc_encode.sc
@@ -0,0 +1,77 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz,ImJezze
+//-----------------------------------------------------------------------------
+// NTSC Effect
+//-----------------------------------------------------------------------------
+
+// NB: intentionally wasteful of uniforms in order for easier slider utilization
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+uniform vec4 u_a_value;
+uniform vec4 u_b_value;
+uniform vec4 u_cc_value;
+uniform vec4 u_p_value;
+uniform vec4 u_scan_time;
+uniform vec4 u_jitter_amount;
+uniform vec4 u_jitter_offset;
+
+uniform vec4 u_texsize;
+uniform vec4 u_screenrect;
+
+SAMPLER2D(DiffuseSampler, 0);
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+const vec4 PI = vec4(3.1415927, 3.1415927, 3.1415927, 3.1415927);
+const vec4 PI2 = vec4(6.2831854, 6.2831854, 6.2831854, 6.2831854);
+
+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);
+
+const vec4 OffsetX = vec4(0.0, 0.25, 0., 0.75);
+const vec4 NotchOffset = vec4(0.0, 1.0, 2.0, 3.0);
+
+void main()
+{
+ vec2 SourceTexelDims = u_texsize.xy;
+ vec2 SourceRes = (1.0 / u_texsize.xy) * u_screenrect.xy;
+
+ vec2 PValueSourceTexel = vec2(u_p_value.x, 0.0) * u_texsize.xy;
+
+ vec2 C0 = v_texcoord0 + PValueSourceTexel * vec2(OffsetX.x, 0.0);
+ vec2 C1 = v_texcoord0 + PValueSourceTexel * vec2(OffsetX.y, 0.0);
+ vec2 C2 = v_texcoord0 + PValueSourceTexel * vec2(OffsetX.z, 0.0);
+ vec2 C3 = v_texcoord0 + PValueSourceTexel * vec2(OffsetX.w, 0.0);
+ vec4 Cx = vec4(C0.x, C1.x, C2.x, C3.x);
+ vec4 Cy = vec4(C0.y, C1.y, C2.y, C3.y);
+ vec4 Texel0 = texture2D(DiffuseSampler, C0);
+ vec4 Texel1 = texture2D(DiffuseSampler, C1);
+ vec4 Texel2 = texture2D(DiffuseSampler, C2);
+ vec4 Texel3 = texture2D(DiffuseSampler, C3);
+
+ vec4 HPosition = Cx / u_screenrect.x;
+ vec4 VPosition = Cy / u_screenrect.y;
+
+ vec4 Y = vec4(dot(Texel0, YDot), dot(Texel1, YDot), dot(Texel2, YDot), dot(Texel3, YDot));
+ vec4 I = vec4(dot(Texel0, IDot), dot(Texel1, IDot), dot(Texel2, IDot), dot(Texel3, IDot));
+ vec4 Q = vec4(dot(Texel0, QDot), dot(Texel1, QDot), dot(Texel2, QDot), dot(Texel3, QDot));
+
+ vec4 W = PI2 * u_cc_value.xxxx * u_scan_time.xxxx;
+ 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 T = HPosition + HOffset + VPosition * VScale;
+ vec4 TW = T * W;
+
+ vec4 output_rgb = Y + I * cos(TW) + Q * sin(TW);
+
+ gl_FragColor = vec4(output_rgb.xyz, 1.0);
+}
diff --git a/src/osd/modules/render/bgfx/inputpair.h b/src/osd/modules/render/bgfx/inputpair.h
index eccd9bccb09..f03dfe8200d 100644
--- a/src/osd/modules/render/bgfx/inputpair.h
+++ b/src/osd/modules/render/bgfx/inputpair.h
@@ -26,6 +26,10 @@ public:
void bind(bgfx_effect *effect, texture_manager& textures);
+ // Getters
+ std::string sampler() const { return m_sampler; }
+ std::string texture() const { return m_texture; }
+
private:
int m_index;
std::string m_sampler;
diff --git a/src/osd/modules/render/bgfx/parameter.cpp b/src/osd/modules/render/bgfx/parameter.cpp
deleted file mode 100644
index 004d5fd17f8..00000000000
--- a/src/osd/modules/render/bgfx/parameter.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ryan Holtz
-//============================================================
-//
-// parameter.cpp - BGFX shader parameter
-//
-// A value that represents some form of parametric
-// operation, which can be fed to the input of a BGFX
-// shader uniform.
-//
-//============================================================
-
-#include "emu.h"
-
-// NB: NOT FINISHED!
-
-#include "parameter.h"
-
-bgfx_parameter::bgfx_parameter(std::string name, parameter_type type, int period)
- : m_name(name)
- , m_type(type)
- , m_period(period)
- , m_frame(0)
-{
-}
-
-bgfx_parameter::~bgfx_parameter()
-{
-}
-
-void bgfx_parameter::frame()
-{
- switch(m_type)
- {
- case PARAM_FRAME_MASK:
- m_frame++;
- if (m_frame == m_period)
- {
- m_frame = 0;
- }
- break;
- default:
- break;
- }
-}
-
-bool bgfx_parameter::active()
-{
- switch (m_type)
- {
- case PARAM_FRAME_MASK:
- return (m_frame % m_period == 0);
- default:
- return false;
- }
-}
diff --git a/src/osd/modules/render/bgfx/parameter.h b/src/osd/modules/render/bgfx/parameter.h
index b31b25d8a75..4cfbc5880c8 100644
--- a/src/osd/modules/render/bgfx/parameter.h
+++ b/src/osd/modules/render/bgfx/parameter.h
@@ -17,27 +17,27 @@
#include <string>
-#include "emu.h"
-
class bgfx_parameter
{
public:
enum parameter_type
{
- PARAM_FRAME_MASK
+ PARAM_FRAME,
+ PARAM_WINDOW
};
- bgfx_parameter(std::string name, parameter_type type, int period);
- ~bgfx_parameter();
+ bgfx_parameter(std::string name, parameter_type type) : m_name(name), m_type(type) { }
+ virtual ~bgfx_parameter() { }
+
+ virtual void tick(float delta) = 0;
- void frame();
- bool active();
+ // Getters
+ virtual float value() = 0;
+ std::string name() const { return m_name; }
-private:
- std::string m_name;
- parameter_type m_type;
- UINT32 m_period;
- UINT32 m_frame;
+protected:
+ std::string m_name;
+ parameter_type m_type;
};
#endif // __DRAWBGFX_PARAMETER__
diff --git a/src/osd/modules/render/bgfx/paramreader.cpp b/src/osd/modules/render/bgfx/paramreader.cpp
index 786f7d09847..c10d447c190 100644
--- a/src/osd/modules/render/bgfx/paramreader.cpp
+++ b/src/osd/modules/render/bgfx/paramreader.cpp
@@ -11,20 +11,36 @@
#include "paramreader.h"
#include "parameter.h"
+#include "frameparameter.h"
+#include "windowparameter.h"
const parameter_reader::string_to_enum parameter_reader::TYPE_NAMES[parameter_reader::TYPE_COUNT] = {
- { "frame_mask", uint64_t(bgfx_parameter::parameter_type::PARAM_FRAME_MASK) }
+ { "frame", bgfx_parameter::parameter_type::PARAM_FRAME },
+ { "window", bgfx_parameter::parameter_type::PARAM_WINDOW }
};
-bgfx_parameter* parameter_reader::read_from_value(const Value& value)
+bgfx_parameter* parameter_reader::read_from_value(const Value& value, uint32_t window_index)
{
validate_parameters(value);
std::string name = value["name"].GetString();
- bgfx_parameter::parameter_type type = bgfx_parameter::parameter_type(get_enum_from_value(value, "type", uint64_t(bgfx_parameter::parameter_type::PARAM_FRAME_MASK), TYPE_NAMES, TYPE_COUNT));
- int period = int(value["period"].GetDouble());
-
- return new bgfx_parameter(name, type, period);
+ bgfx_parameter::parameter_type type = bgfx_parameter::parameter_type(get_enum_from_value(value, "type", bgfx_parameter::parameter_type::PARAM_FRAME, TYPE_NAMES, TYPE_COUNT));
+
+ if (type == bgfx_parameter::parameter_type::PARAM_FRAME)
+ {
+ 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
+ {
+ assert(false);
+ }
+
+ return nullptr;
}
void parameter_reader::validate_parameters(const Value& value)
diff --git a/src/osd/modules/render/bgfx/paramreader.h b/src/osd/modules/render/bgfx/paramreader.h
index 4b31db52528..14ab9cecf02 100644
--- a/src/osd/modules/render/bgfx/paramreader.h
+++ b/src/osd/modules/render/bgfx/paramreader.h
@@ -18,13 +18,13 @@ class bgfx_parameter;
class parameter_reader : public state_reader
{
public:
- static bgfx_parameter* read_from_value(const Value& value);
+ static bgfx_parameter* read_from_value(const Value& value, uint32_t window_index);
private:
static void validate_parameters(const Value& value);
- static const int TYPE_COUNT = 1;
- static const string_to_enum TYPE_NAMES[TYPE_COUNT];
+ static const int TYPE_COUNT = 2;
+ static const string_to_enum TYPE_NAMES[TYPE_COUNT];
};
#endif // __DRAWBGFX_PARAM_READER__
diff --git a/src/osd/modules/render/bgfx/paramuniform.cpp b/src/osd/modules/render/bgfx/paramuniform.cpp
new file mode 100644
index 00000000000..c318f2ff01c
--- /dev/null
+++ b/src/osd/modules/render/bgfx/paramuniform.cpp
@@ -0,0 +1,23 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//============================================================
+//
+// paramuniform.cpp - BGFX shader chain parametric uniform
+//
+//============================================================
+
+#include "paramuniform.h"
+
+#include "parameter.h"
+
+bgfx_param_uniform::bgfx_param_uniform(bgfx_uniform* uniform, bgfx_parameter* param)
+ : bgfx_entry_uniform(uniform)
+ , m_param(param)
+{
+}
+
+void bgfx_param_uniform::bind()
+{
+ float value = m_param->value();
+ m_uniform->set(&value, sizeof(float));
+}
diff --git a/src/osd/modules/render/bgfx/paramuniform.h b/src/osd/modules/render/bgfx/paramuniform.h
new file mode 100644
index 00000000000..b49fb2c7d61
--- /dev/null
+++ b/src/osd/modules/render/bgfx/paramuniform.h
@@ -0,0 +1,29 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//============================================================
+//
+// paramuniform.h - BGFX shader chain parametric uniform
+//
+//============================================================
+
+#pragma once
+
+#ifndef __DRAWBGFX_PARAM_UNIFORM__
+#define __DRAWBGFX_PARAM_UNIFORM__
+
+#include "entryuniform.h"
+
+class bgfx_parameter;
+
+class bgfx_param_uniform : public bgfx_entry_uniform
+{
+public:
+ bgfx_param_uniform(bgfx_uniform* uniform, bgfx_parameter* param);
+
+ virtual void bind() override;
+
+private:
+ bgfx_parameter* m_param;
+};
+
+#endif // __DRAWBGFX_PARAM_UNIFORM__
diff --git a/src/osd/modules/render/bgfx/shadermanager.cpp b/src/osd/modules/render/bgfx/shadermanager.cpp
index 9a277a2aeae..3d9479a228a 100644
--- a/src/osd/modules/render/bgfx/shadermanager.cpp
+++ b/src/osd/modules/render/bgfx/shadermanager.cpp
@@ -41,28 +41,32 @@ bgfx::ShaderHandle shader_manager::shader(std::string name)
bgfx::ShaderHandle shader_manager::load_shader(std::string name)
{
- std::string shader_path = "shaders/dx9/";
+ std::string shader_path;
switch (bgfx::getRendererType())
{
+ case bgfx::RendererType::Direct3D9:
+ shader_path = m_options.bgfx_path() + std::string("/shaders/dx9/");
+ break;
+
case bgfx::RendererType::Direct3D11:
case bgfx::RendererType::Direct3D12:
- shader_path = "shaders/dx11/";
+ shader_path = m_options.bgfx_path() + std::string("/shaders/dx11/");
break;
case bgfx::RendererType::OpenGL:
- shader_path = "shaders/glsl/";
+ shader_path = m_options.bgfx_path() + std::string("/shaders/glsl/");
break;
case bgfx::RendererType::Metal:
- shader_path = "shaders/metal/";
+ shader_path = m_options.bgfx_path() + std::string("/shaders/metal/");
break;
case bgfx::RendererType::OpenGLES:
- shader_path = "shaders/gles/";
+ shader_path = m_options.bgfx_path() + std::string("/shaders/gles/");
break;
default:
- break;
+ fatalerror("Unknown BGFX renderer type %d", bgfx::getRendererType());
}
bgfx::ShaderHandle handle = bgfx::createShader(load_mem(shader_path + name + ".bin"));
diff --git a/src/osd/modules/render/bgfx/shadermanager.h b/src/osd/modules/render/bgfx/shadermanager.h
index 5cc971ca829..18c95bf6238 100644
--- a/src/osd/modules/render/bgfx/shadermanager.h
+++ b/src/osd/modules/render/bgfx/shadermanager.h
@@ -14,14 +14,17 @@
#ifndef __DRAWBGFX_SHADER_MANAGER__
#define __DRAWBGFX_SHADER_MANAGER__
+#include <bgfx/bgfx.h>
+
+#include <modules/lib/osdobj_common.h>
+
#include <map>
#include <string>
-#include <bgfx/bgfx.h>
class shader_manager {
public:
- shader_manager() {}
+ shader_manager(osd_options& options) : m_options(options) { }
~shader_manager();
// Getters
@@ -31,7 +34,8 @@ private:
bgfx::ShaderHandle load_shader(std::string name);
static const bgfx::Memory* load_mem(std::string name);
- std::map<std::string, bgfx::ShaderHandle> m_shaders;
+ std::map<std::string, bgfx::ShaderHandle> m_shaders;
+ osd_options& m_options;
};
#endif // __DRAWBGFX_SHADER_MANAGER__
diff --git a/src/osd/modules/render/bgfx/suppressor.cpp b/src/osd/modules/render/bgfx/suppressor.cpp
index eec0efb6440..d29e289ff2a 100644
--- a/src/osd/modules/render/bgfx/suppressor.cpp
+++ b/src/osd/modules/render/bgfx/suppressor.cpp
@@ -11,9 +11,10 @@
#include "slider.h"
-bgfx_suppressor::bgfx_suppressor(std::vector<bgfx_slider*> sliders, uint32_t condition, void* value)
+bgfx_suppressor::bgfx_suppressor(std::vector<bgfx_slider*> sliders, uint32_t condition, combine_mode combine, void* value)
: m_sliders(sliders)
, m_condition(condition)
+ , m_combine(combine)
, m_value(nullptr)
{
uint32_t size = sliders[0]->size();
diff --git a/src/osd/modules/render/bgfx/suppressor.h b/src/osd/modules/render/bgfx/suppressor.h
index a371ed4e9fa..93166eff693 100644
--- a/src/osd/modules/render/bgfx/suppressor.h
+++ b/src/osd/modules/render/bgfx/suppressor.h
@@ -12,6 +12,8 @@
#ifndef __DRAWBGFX_SUPPRESSOR__
#define __DRAWBGFX_SUPPRESSOR__
+#include <bgfx/bgfx.h>
+
#include <vector>
class bgfx_slider;
@@ -27,15 +29,23 @@ public:
CONDITION_COUNT
};
- bgfx_suppressor(std::vector<bgfx_slider*> sliders, uint32_t condition, void* value);
+ enum combine_mode {
+ COMBINE_AND,
+ COMBINE_OR
+ };
+
+ bgfx_suppressor(std::vector<bgfx_slider*> sliders, uint32_t condition, combine_mode combine, void* value);
~bgfx_suppressor();
- bool suppress();
+ // Getters
+ bool suppress();
+ combine_mode combine() const { return m_combine; }
private:
std::vector<bgfx_slider*> m_sliders;
uint32_t m_condition;
- void* m_value;
+ combine_mode m_combine;
+ uint8_t* m_value;
};
#endif // __DRAWBGFX_SUPPRESSOR__
diff --git a/src/osd/modules/render/bgfx/suppressorreader.cpp b/src/osd/modules/render/bgfx/suppressorreader.cpp
index daa3a55c7c6..b32c7f4bd5d 100644
--- a/src/osd/modules/render/bgfx/suppressorreader.cpp
+++ b/src/osd/modules/render/bgfx/suppressorreader.cpp
@@ -18,12 +18,18 @@ const suppressor_reader::string_to_enum suppressor_reader::CONDITION_NAMES[suppr
{ "notequal", bgfx_suppressor::condition_type::CONDITION_NOTEQUAL }
};
+const suppressor_reader::string_to_enum suppressor_reader::COMBINE_NAMES[suppressor_reader::COMBINE_COUNT] = {
+ { "and", bgfx_suppressor::combine_mode::COMBINE_AND },
+ { "or", bgfx_suppressor::combine_mode::COMBINE_OR }
+};
+
bgfx_suppressor* suppressor_reader::read_from_value(const Value& value, std::map<std::string, bgfx_slider*>& sliders)
{
validate_parameters(value);
std::string name = value["name"].GetString();
uint32_t condition = uint32_t(get_enum_from_value(value, "condition", bgfx_suppressor::condition_type::CONDITION_EQUAL, CONDITION_NAMES, CONDITION_COUNT));
+ bgfx_suppressor::combine_mode mode = bgfx_suppressor::combine_mode(get_enum_from_value(value, "combine", bgfx_suppressor::combine_mode::COMBINE_OR, COMBINE_NAMES, COMBINE_COUNT));
std::vector<bgfx_slider*> check_sliders;
check_sliders.push_back(sliders[name + "0"]);
@@ -51,7 +57,7 @@ bgfx_suppressor* suppressor_reader::read_from_value(const Value& value, std::map
if (slider_count > 1)
{
get_values(value, "value", values, slider_count);
- for (int index = 0; index < slider_count; index++)
+ for (int index = 1; index < slider_count; index++)
{
std::string desc;
char full_name[1024]; // arbitrary
@@ -64,7 +70,7 @@ bgfx_suppressor* suppressor_reader::read_from_value(const Value& value, std::map
values[0] = get_int(value, "value", 0);
}
- return new bgfx_suppressor(check_sliders, condition, values);
+ return new bgfx_suppressor(check_sliders, condition, mode, values);
}
void suppressor_reader::validate_parameters(const Value& value)
diff --git a/src/osd/modules/render/bgfx/suppressorreader.h b/src/osd/modules/render/bgfx/suppressorreader.h
index ea0e86304b0..bad13d0d0b6 100644
--- a/src/osd/modules/render/bgfx/suppressorreader.h
+++ b/src/osd/modules/render/bgfx/suppressorreader.h
@@ -31,6 +31,8 @@ private:
static const int CONDITION_COUNT = 2;
static const string_to_enum CONDITION_NAMES[CONDITION_COUNT];
+ static const int COMBINE_COUNT = 2;
+ static const string_to_enum COMBINE_NAMES[COMBINE_COUNT];
};
#endif // __DRAWBGFX_SUPPRESSOR_READER__
diff --git a/src/osd/modules/render/bgfx/varying.def.sc b/src/osd/modules/render/bgfx/varying.def.sc
index 4745725e015..95b607539a7 100644
--- a/src/osd/modules/render/bgfx/varying.def.sc
+++ b/src/osd/modules/render/bgfx/varying.def.sc
@@ -1,6 +1,8 @@
vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0);
vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0);
-vec3 v_pos : TEXCOORD1 = vec3(0.0, 0.0, 0.0);
+vec2 v_texcoord1 : TEXCOORD1 = vec2(0.0, 0.0);
+vec2 v_texcoord2 : TEXCOORD2 = vec2(0.0, 0.0);
+vec3 v_pos : TEXCOORD3 = vec3(0.0, 0.0, 0.0);
vec3 a_position : POSITION;
vec4 a_color0 : COLOR0;
diff --git a/src/osd/modules/render/bgfx/vs_color.sc b/src/osd/modules/render/bgfx/vs_color.sc
new file mode 100644
index 00000000000..c3699f6fbd9
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_color.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_deconverge.sc b/src/osd/modules/render/bgfx/vs_deconverge.sc
new file mode 100644
index 00000000000..60603ae8dbe
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_deconverge.sc
@@ -0,0 +1,40 @@
+$input a_position, a_texcoord0, a_color0
+$output v_color0, v_texcoord0, v_texcoord1, v_texcoord2
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+uniform vec4 u_texsize;
+uniform vec4 u_screenrect;
+
+uniform vec4 u_swap_xy;
+uniform vec4 u_quad_dims;
+
+uniform vec4 u_converge_red;
+uniform vec4 u_converge_green;
+uniform vec4 u_converge_blue;
+uniform vec4 u_radial_converge_red;
+uniform vec4 u_radial_converge_green;
+uniform vec4 u_radial_converge_blue;
+
+uniform vec4 u_guest_dims;
+
+void main()
+{
+ gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));
+
+ vec2 HalfSourceRect = u_screenrect.xy * 0.5;
+
+ vec2 QuadRatio = vec2(1.0, (u_swap_xy.x > 0.0) ? u_quad_dims.y / u_quad_dims.x : u_quad_dims.x / u_quad_dims.y);
+
+ // 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_color0 = a_color0;
+}
diff --git a/src/osd/modules/render/bgfx/vs_ntsc_decode.sc b/src/osd/modules/render/bgfx/vs_ntsc_decode.sc
new file mode 100644
index 00000000000..c3699f6fbd9
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_ntsc_decode.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_ntsc_encode.sc b/src/osd/modules/render/bgfx/vs_ntsc_encode.sc
new file mode 100644
index 00000000000..c3699f6fbd9
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_ntsc_encode.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/windowparameter.h b/src/osd/modules/render/bgfx/windowparameter.h
new file mode 100644
index 00000000000..f4763647c32
--- /dev/null
+++ b/src/osd/modules/render/bgfx/windowparameter.h
@@ -0,0 +1,33 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//============================================================
+//
+// windowparameter.h - Static window-index shader param
+//
+//============================================================
+
+#pragma once
+
+#ifndef __DRAWBGFX_WINDOW_PARAMETER__
+#define __DRAWBGFX_WINDOW_PARAMETER__
+
+#include <bgfx/bgfx.h>
+
+#include <string>
+
+#include "parameter.h"
+
+class bgfx_window_parameter : public bgfx_parameter
+{
+public:
+ bgfx_window_parameter(std::string name, parameter_type type, uint32_t index) : bgfx_parameter(name, type), m_index(index) { }
+ virtual ~bgfx_window_parameter() { }
+
+ virtual float value() override { return float(m_index); }
+ virtual void tick(float delta) override { };
+
+private:
+ uint32_t m_index;
+};
+
+#endif // __DRAWBGFX_WINDOW_PARAMETER__
diff --git a/src/osd/modules/render/d3d/d3dcomm.h b/src/osd/modules/render/d3d/d3dcomm.h
index 4894cd7f491..28e79725cf5 100644
--- a/src/osd/modules/render/d3d/d3dcomm.h
+++ b/src/osd/modules/render/d3d/d3dcomm.h
@@ -112,34 +112,34 @@ public:
render_texinfo & get_texinfo() { return m_texinfo; }
- int get_width() { return m_rawdims.c.x; }
- int get_height() { return m_rawdims.c.y; }
- int get_xscale() { return m_xprescale; }
- int get_yscale() { return m_yprescale; }
+ int get_width() const { return m_rawdims.c.x; }
+ int get_height() const { return m_rawdims.c.y; }
+ int get_xscale() const { return m_xprescale; }
+ int get_yscale() const { return m_yprescale; }
- UINT32 get_flags() { return m_flags; }
+ UINT32 get_flags() const { return m_flags; }
void set_data(const render_texinfo *texsource, UINT32 flags);
- texture_info * get_next() { return m_next; }
- texture_info * get_prev() { return m_prev; }
+ texture_info * get_next() const { return m_next; }
+ texture_info * get_prev() const { return m_prev; }
- UINT32 get_hash() { return m_hash; }
+ UINT32 get_hash() const { return m_hash; }
void set_next(texture_info *next) { m_next = next; }
void set_prev(texture_info *prev) { m_prev = prev; }
- bool paused() { return m_cur_frame == m_prev_frame; }
+ bool paused() const { return m_cur_frame == m_prev_frame; }
void advance_frame() { m_prev_frame = m_cur_frame; }
void increment_frame_count() { m_cur_frame++; }
void mask_frame_count(int mask) { m_cur_frame %= mask; }
- int get_cur_frame() { return m_cur_frame; }
- int get_prev_frame() { return m_prev_frame; }
+ int get_cur_frame() const { return m_cur_frame; }
+ int get_prev_frame() const { return m_prev_frame; }
- texture * get_tex() { return m_d3dtex; }
- surface * get_surface() { return m_d3dsurface; }
- texture * get_finaltex() { return m_d3dfinaltex; }
+ texture * get_tex() const { return m_d3dtex; }
+ surface * get_surface() const { return m_d3dsurface; }
+ texture * get_finaltex() const { return m_d3dfinaltex; }
vec2f & get_uvstart() { return m_start; }
vec2f & get_uvstop() { return m_stop; }
@@ -187,19 +187,20 @@ public:
float line_time, float line_length,
float prim_width, float prim_height);
- D3DPRIMITIVETYPE get_type() { return m_type; }
- UINT32 get_count() { return m_count; }
- UINT32 get_vertcount() { return m_numverts; }
- UINT32 get_flags() { return m_flags; }
+ // TODO: Remove needless 'get_' prefix
+ D3DPRIMITIVETYPE get_type() const { return m_type; }
+ UINT32 get_count() const { return m_count; }
+ UINT32 get_vertcount() const { return m_numverts; }
+ UINT32 get_flags() const { return m_flags; }
- texture_info * get_texture() { return m_texture; }
- DWORD get_modmode() { return m_modmode; }
+ texture_info * get_texture() const { return m_texture; }
+ DWORD get_modmode() const { return m_modmode; }
- float get_line_time() { return m_line_time; }
- float get_line_length() { return m_line_length; }
+ float get_line_time() const { return m_line_time; }
+ float get_line_length() const { return m_line_length; }
- float get_prim_width() { return m_prim_width; }
- float get_prim_height() { return m_prim_height; }
+ float get_prim_width() const { return m_prim_width; }
+ float get_prim_height() const { return m_prim_height; }
private:
diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp
index 6b64a239317..76ae3dd800b 100644
--- a/src/osd/modules/render/drawbgfx.cpp
+++ b/src/osd/modules/render/drawbgfx.cpp
@@ -135,10 +135,12 @@ int renderer_bgfx::create()
m_dimensions = osd_dim(m_width[0], m_height[0]);
}
+ osd_options& options = downcast<osd_options &>(window().machine().options());
m_textures = new texture_manager();
m_targets = new target_manager(*m_textures);
- m_shaders = new shader_manager();
- m_effects = new effect_manager(*m_shaders);
+
+ m_shaders = new shader_manager(options);
+ m_effects = new effect_manager(options, *m_shaders);
if (window().m_index != 0)
{
@@ -162,8 +164,8 @@ int renderer_bgfx::create()
m_screen_effect[3] = m_effects->effect("screen_add");
#if USE_NEW_SHADERS
- m_chains = new chain_manager(*m_textures, *m_targets, *m_effects, m_width[window().m_index], m_height[window().m_index]);
- m_screen_chain = m_chains->chain("test", window().machine());
+ m_chains = new chain_manager(options, *m_textures, *m_targets, *m_effects, m_width[window().m_index], m_height[window().m_index]);
+ m_screen_chain = m_chains->chain(options.bgfx_screen_chain(), window().machine(), window().m_index);
m_sliders_dirty = true;
#endif
@@ -852,12 +854,10 @@ const bgfx::Memory* renderer_bgfx::mame_texture_data_to_bgfx_texture_data(UINT32
int renderer_bgfx::handle_screen_chains()
{
- int index = window().m_index;
-
window().m_primlist->acquire_lock();
-
+
int view = 0;
-
+
// process
render_primitive *prim = window().m_primlist->first();
while (prim != nullptr)
diff --git a/src/osd/windows/winmain.cpp b/src/osd/windows/winmain.cpp
index 1171775d042..cc413d79da0 100644
--- a/src/osd/windows/winmain.cpp
+++ b/src/osd/windows/winmain.cpp
@@ -279,7 +279,7 @@ const options_entry windows_options::s_option_entries[] =
{ nullptr, nullptr, OPTION_HEADER, "DIRECTDRAW-SPECIFIC OPTIONS" },
{ WINOPTION_HWSTRETCH ";hws", "1", OPTION_BOOLEAN, "enables hardware stretching" },
- // post-processing options
+ // D3D post-processing options
{ nullptr, nullptr, OPTION_HEADER, "DIRECT3D POST-PROCESSING OPTIONS" },
{ WINOPTION_HLSL_ENABLE";hlsl", "0", OPTION_BOOLEAN, "enables HLSL post-processing (PS3.0 required)" },
{ WINOPTION_HLSLPATH, "hlsl", OPTION_STRING, "path to hlsl files" },