From a4f615a14de8844ba996cf89d26639be9fb7c33b Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Tue, 29 Mar 2016 01:56:19 +0200 Subject: [PATCH] Get NTSC working in both bgfx and d3d, nw --- bgfx/chains/default.json | 4 +- bgfx/chains/hlsl.json | 50 +++++++++------ bgfx/chains/unfiltered.json | 4 +- bgfx/shaders/dx11/fs_blit.bin | Bin 42904 -> 42904 bytes bgfx/shaders/dx11/fs_color.bin | Bin 45305 -> 45305 bytes bgfx/shaders/dx11/fs_deconverge.bin | Bin 43108 -> 43108 bytes bgfx/shaders/dx11/fs_defocus.bin | Bin 49898 -> 49898 bytes bgfx/shaders/dx11/fs_distortion.bin | Bin 60482 -> 60482 bytes bgfx/shaders/dx11/fs_gui.bin | Bin 42904 -> 42904 bytes bgfx/shaders/dx11/fs_ntsc_decode.bin | Bin 60967 -> 60511 bytes bgfx/shaders/dx11/fs_ntsc_encode.bin | Bin 50379 -> 50379 bytes bgfx/shaders/dx11/fs_phosphor.bin | Bin 45190 -> 45190 bytes bgfx/shaders/dx11/fs_post.bin | Bin 57706 -> 57706 bytes bgfx/shaders/dx11/fs_prescale.bin | Bin 45438 -> 45438 bytes bgfx/shaders/dx11/fs_screen.bin | Bin 42904 -> 42904 bytes bgfx/shaders/dx11/vs_blit.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_color.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_deconverge.bin | Bin 45836 -> 45836 bytes bgfx/shaders/dx11/vs_defocus.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_distortion.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_gui.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_ntsc_decode.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_ntsc_encode.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_phosphor.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_post.bin | Bin 43223 -> 43223 bytes bgfx/shaders/dx11/vs_prescale.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx11/vs_screen.bin | Bin 43083 -> 43083 bytes bgfx/shaders/dx9/fs_ntsc_decode.bin | Bin 7464 -> 8356 bytes bgfx/shaders/gles/fs_ntsc_decode.bin | Bin 6640 -> 6438 bytes bgfx/shaders/glsl/fs_ntsc_decode.bin | Bin 6282 -> 6050 bytes bgfx/shaders/metal/fs_ntsc_decode.bin | Bin 7098 -> 6849 bytes hlsl/ntsc.fx | 26 +++----- .../render/bgfx/shaders/fs_ntsc_decode.sc | 57 ++++++++++-------- .../render/bgfx/shaders/fs_ntsc_encode.sc | 2 +- 34 files changed, 80 insertions(+), 63 deletions(-) diff --git a/bgfx/chains/default.json b/bgfx/chains/default.json index 1142275e528..1012d6eacd5 100644 --- a/bgfx/chains/default.json +++ b/bgfx/chains/default.json @@ -7,14 +7,14 @@ } ], "passes": [ - { "effect": "default\blit", + { "effect": "default/blit", "name": "Copy To Unstretched Texture", "input": [ { "sampler": "s_tex", "texture": "screen" } ], "output": "temp" }, - { "effect": "default\blit", + { "effect": "default/blit", "name": "Final Upscale", "input": [ { "sampler": "s_tex", "target": "temp" } diff --git a/bgfx/chains/hlsl.json b/bgfx/chains/hlsl.json index 3353f92018a..eabf0664857 100644 --- a/bgfx/chains/hlsl.json +++ b/bgfx/chains/hlsl.json @@ -57,17 +57,18 @@ { "type": "intenum", "name": "adjustments", "text": "Enable Adjustments", "default": 0, "max": 1, "min": 0, "step": 1, "scale": 1.0, "format": "%s", "screen": "any", "strings": [ "Off", "On" ] }, - { "type": "intenum", "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": "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": "intenum", "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 Outgoing Phase Offset", "default": 0, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "raster" }, + { "type": "float", "name": "p_value", "text": "NTSC Incoming Phase Pixel Clock Scale", "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": 200, "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" }, @@ -88,18 +89,18 @@ { "type": "color", "name": "phosphor", "text": "Phosphor Persistence, ", "default": [ 55, 55, 55 ], "max": [ 100, 100, 100 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, - { "type": "float", "name": "scanline_alpha", "text": "Scanline Amount", "default": 40, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "scanline_alpha", "text": "Scanline Amount", "default": 6, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "float", "name": "scanline_scale", "text": "Overall Scanline Scale", "default": 100, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "float", "name": "scanline_bright_scale", "text": "Scanline Brightness Scale", "default": 200, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "float", "name": "scanline_bright_offset", "text": "Scanline Brightness Offset", "default": 0, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "float", "name": "scanline_jitter_amount", "text": "Scanline Jitter Amount", "default": 0, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "float", "name": "scanline_height", "text": "Individual Scanline Scale", "default": 100, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "float", "name": "scanline_variation", "text": "Scanline Variation", "default": 100, "max": 400, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, - { "type": "float", "name": "shadow_alpha", "text": "Shadow Mask Amount", "default": 20, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "shadow_alpha", "text": "Shadow Mask Amount", "default": 40, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "vec2", "name": "shadow_uv_count", "text": "Shadow Mask Pixel Count ", "default": [ 12, 12 ], "max": [ 128, 128 ], "min": [ 1, 1 ], "step": 1, "scale": 1.0, "format": "%3f", "screen": "crt" }, { "type": "vec2", "name": "shadow_uv_size", "text": "Shadow Mask UV Size ", "default": [ 500, 500 ], "max": [ 1000, 1000 ], "min": [ 0, 0 ], "step": 1, "scale": 0.001, "format": "%1.4f", "screen": "crt" }, { "type": "vec2", "name": "shadow_uv_offset", "text": "Shadow Mask UV Offset ", "default": [ 0, 0 ], "max": [ 1000, 1000 ], "min": [ 0, 0 ], "step": 1, "scale": 0.001, "format": "%1.4f", "screen": "crt" }, - { "type": "float", "name": "humbar_alpha", "text": "Hum Bar Amount", "default": 0, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, + { "type": "float", "name": "humbar_alpha", "text": "Hum Bar Amount", "default": 5, "max": 100, "min": 0, "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "float", "name": "humbar_hertz_rate", "text": "Hum Bar Frequency", "default": 100, "max": 10000, "min": 0, "step": 1, "scale": 0.00001, "format": "%1.7f", "screen": "crt" }, { "type": "color", "name": "floor", "text": "Signal Floor, ", "default": [ 5, 5, 5 ], "max": [ 100, 100, 100 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, { "type": "color", "name": "power", "text": "Signal Exponent, ", "default": [ 80, 80, 80 ], "max": [ 400, 400, 400 ], "min": [ 0, 0, 0 ], "step": 1, "scale": 0.01, "format": "%1.2f", "screen": "crt" }, @@ -154,6 +155,11 @@ // oversample (optional): Double the internal size of this render target. Certain effects benefit from operating at a higher internal resolution. If you're not sure, leave it as false. // values: true, false // default: false + { + "name": "ntsc", + "mode": "guest", + "doublebuffer": true + }, { "name": "guest", "mode": "guest", @@ -169,6 +175,15 @@ // passes (required): The list of individual shaders to invoke, and any dynamic input parameters they need. "passes": [ + { + // See the pass after this one for a verbose explanation of each parameter. + "effect": "hlsl/blit", + "name": "NTSC Blit to bilinear-able target", + "input": [ + { "sampler": "s_tex", "texture": "screen" } + ], + "output": "ntsc" + }, { // effect (required): The name of the effect JSON file to load for this pass. // value: Any valid JSON filename included in your shader chain, without the extension. @@ -246,13 +261,13 @@ // // option (optional): The name of any MAME option, which will have its value fetched and used as the name of a PNG to load from the artwork directory. // value: Any valid MAME INI option name. - { "sampler": "s_tex", "texture": "screen" } + { "sampler": "s_tex", "target": "ntsc" } ], // output (required): The target to use as the output for this pass. Can be one of the named targets in "targets", or "output" // or "previous" for one of two automatically-generated targets. // value: Any valid ASCII string that names a target. - "output": "guest" + "output": "ntsc" }, { "effect": "hlsl/ntsc_decode", "name": "NTSC Decode", @@ -264,6 +279,7 @@ { "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" }, @@ -274,7 +290,7 @@ { "uniform": "u_jitter_amount", "parameter": "jitter" } ], "input": [ - { "sampler": "s_tex", "target": "guest" } + { "sampler": "s_tex", "target": "ntsc" } ], "output": "guest" }, diff --git a/bgfx/chains/unfiltered.json b/bgfx/chains/unfiltered.json index 19d74cd5eec..a644f9af370 100644 --- a/bgfx/chains/unfiltered.json +++ b/bgfx/chains/unfiltered.json @@ -7,14 +7,14 @@ } ], "passes": [ - { "effect": "unfiltered\blit", + { "effect": "unfiltered/blit", "name": "Copy To Unstretched Texture", "input": [ { "sampler": "s_tex", "texture": "screen" } ], "output": "temp" }, - { "effect": "unfiltered\blit", + { "effect": "unfiltered/blit", "name": "Final Upscale", "input": [ { "sampler": "s_tex", "target": "temp" } diff --git a/bgfx/shaders/dx11/fs_blit.bin b/bgfx/shaders/dx11/fs_blit.bin index 98e6afc9871200c65105976444a7239ca1843106..cc7afc788ab49b8e05e07dcf3340eef02f77c256 100644 GIT binary patch delta 107 zcmbPno@vH;rU^0vJ1?~B)n)64yL>XKIlgT3+l@Lo+!Fr}{|sYfU|{%mL#OqTX`t_t pWCoXOPTRXTZ{U98$m-UZ&gHv#q3?HJJPK!rF)@~JW}i2a696+mFH-;j delta 107 zcmbPno@vH;rU^0v=bCK3y;=3(Kwn9tRp)W((v3Pf+!9T*eugnJFfgoBOo+`6Gj&+- py`b#GoX^uXZ{U98$h!5eN`T4cg}&c?@hF@f#>8l{nSI_wP5@Mag1j;;LJUV38BEtPGZc9;FeEKzVqg&1Y{bxios}v`kPGy)wr21+?*U6BL$>3SH?8B;W2!17!#xR!!S1x=2 delta 100 zcmaEIf$7NwrU^0v2|1GYOMgZC-mhN7`)$MBi5qn+cqE!<{S0GdU|`^#+H?8GA2HuK io2+UX_Gp@JuHkv($okQJc7Vy|T)*#ucoZ&p!43fPq%3j( diff --git a/bgfx/shaders/dx11/fs_defocus.bin b/bgfx/shaders/dx11/fs_defocus.bin index 0453ced92453c3df9befa1be5071fa2610064c3a..f342c80f26b6b4e4b618c6bf3d4a31cd3c9da541 100644 GIT binary patch delta 215 zcmaFW%KWO8d4iq5v^~tVx2}6#-ytxiPl`Y7$VR_8d=mc;{|sYfU|3&Cf(Q95~uo7IXP_USyoC z$Zs%NU^&ZXtxzse?SLExhEE^47$ih_1sE8BTA274#6=l^Y-T2e96v~I^2K$blMPsn iHb2W^@xtShtzk@zc9SEw%QJoEn5?&5YV(xsVcYCVmMPq4qC~3>%L!Fr2JnV5q$XR41@mk#!g2=4T=t4jhjy69P;+FEUP6 z-XGkmn diff --git a/bgfx/shaders/dx11/fs_distortion.bin b/bgfx/shaders/dx11/fs_distortion.bin index 4399b58c49ccafe3c5bebecc2c43da9c65754578..0ee1150c722e697f1aec07d6e2f02821c8a2e5a1 100644 GIT binary patch delta 190 zcmX?fgZa=6<_YHnas+as4Lu%h@I0P*Z|$@HJ{#|)h)euG{49G!F){StV&1$_W~wizJL_#O-_DDS zjFTJr^f%XK-I8Y#D4879B?Y85mvvb&3nc&z{`8TLL0ptUfPsOTDS=`0q27iNJeEER UV`4O#yzz-XQ*6lQM^6&i0o`Cn&;S4c delta 190 zcmX?fgZa=6<_YHnvL?;mzQ&R>@&4x<)4v>EHFM*=6mf~>SwF)V85kILuFdw9U;p26 zcPX>zt=khOZH|)AVPU_Q%EU0|1@q)y8A)!R7-j~oOH2$w7nwG1l$q+wS@-c{uG6*m*Ff%zYZ9df75Q4|j WM`28i+LJdv(P!FXw)xSM1a<&;aZ6wT diff --git a/bgfx/shaders/dx11/fs_gui.bin b/bgfx/shaders/dx11/fs_gui.bin index 1ef0ea198277f40b3f9375dd26c6d35b0bb01618..54a4ed300e39e1370d7769737e865ea0a696022e 100644 GIT binary patch delta 143 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 delta 198 zcmZpB$kg_bX@Z|Xs9)05+%uC|wNC!Kk;He+Wn-KMk3`d~pJ9v)3=E|WA}#04Cb)Lq zoz`VlZ9D%;5TynIUO0)8vK)BAYKTEoI!? zB*bCInwt5~-(+)tz(y`11E6uAKJqb$i!ul>FfcP2FiZ}Lp2n2$dGf1hDIm3(EvCT@ dkHw3^m>4Z5e_bNav^;Q)m+OSGbZb@9=UDZ-+&5fI%F}4UxG|l=M#>l|HaDB(lrMiiI zjy)|;_8QLDklx%R%EH2aFO`X5&I{(ry^@;Tlm0L>lpSYaU5mY4C0~;0t^hyOb$$w{p#*9O^BMTS1$#mHha}8gy6CA Pau^e%&gPp}CvpP-#K}dl diff --git a/bgfx/shaders/dx11/fs_prescale.bin b/bgfx/shaders/dx11/fs_prescale.bin index a179c13e6ec4a50a27bd8f9fbaeceb40992bd97e..7e5fadd5805e533e2ef54f36167ca9e071c3f7cb 100644 GIT binary patch delta 151 zcmezOi0R)WrU_00kMhFfcO}Y&MMZb;o1q(l91Qlg)3JPvisu!`wUH delta 151 zcmezOi0R)WrU_00y4BC5GLzzhxjA?vK0ajFw=qbESE6aw&oD*?28O*X#+h4IE%jKZ z!pG>@n_;|p8t)HgcIPZ62HwZao2LrCwdV|+cHiHm^CBbTFIcM6d0g+KoCn+!Fr|{|sYfU|{&j{QhQ`;sx*N z%kN)*=czM$^9Jr8%xn|085o2gZeGX#&XzUmpbnSs=7qj9IRp!s7#Kc%>cLoipQ+kVN8sco7v}02Yzx!;w$wosF9*Mt)e}*wKFfbTRN}t`7ILoo? p-v0GAyw4;z$MU>!Wc|l!#Ob@)&+of89)+{Qm>4ZKZ<#Zl8vws0Es6jD delta 107 zcmX?of$8)GrU{Ay$6}dPqg?N9bDo>BM&bD>(~X8AJQ5AFeugnJFfc?ZzCE+^>`9+J ppH2yA*sMt29Lw{@ku_vLo4?6sKfmwZcofbGV`8-1yk*XGZUDn&E@A)x diff --git a/bgfx/shaders/dx11/vs_deconverge.bin b/bgfx/shaders/dx11/vs_deconverge.bin index 62440de3aa77ab069baa3f57ea8e618abcbee9b4..59e0c530392a70152e212fea41c3a0fe79dd349b 100644 GIT binary patch delta 122 zcmeBq#?y^XvJfw)Sn>WjnQd;f~CuvK#Md@JakV{4yRL#%nr)4BQzZ1N9d*Yma<&F0=_#_%<{S0GdU|f?4W2{3r%kjT)Wu1~)=x?%_Ka|yvDOhf^*y0b2cr+{xV`9{uT)JEzq;}czG;RRi C6f)%i diff --git a/bgfx/shaders/dx11/vs_defocus.bin b/bgfx/shaders/dx11/vs_defocus.bin index df493402ed8374921f33fdb45411db1115264af1..f75c794c2c2631dfd9f9a0ca3d269f96f19cf0aa 100644 GIT binary patch delta 148 zcmX?of$8)GrU{Ayb6#zpy|MP?x$p57pW-q;hi^0#;gR@z_-7a+0|SFg(5nX9{mxEZ z7RwET9pgJU$MU>!WVKZ|&gr|^&yUrM$v0zj=!_4Hcr?rkV^Ycn8ifG4iJ5r}dHH#% UKq1{-dLJ1Xd@?p)om0jQ0R9m+w*UYD delta 148 zcmX?of$8)GrU{Ayr#VG>4v2l6@np(swY&H7-flD$;gM*Z^)rl-fq~)ZYo_1*dCl(o zy7TJ)GnVUZj^%md$U5`F6n~S=etxW8OaUC5LuY(o#G_$W7?Y9#&?p4RP0Y+=$ji@5 U1q$iz()-BB5W=zf>YOre05R-0+yDRo diff --git a/bgfx/shaders/dx11/vs_distortion.bin b/bgfx/shaders/dx11/vs_distortion.bin index 152756344fb9335cfd2186f3473d66c026bfdaa7..73b8e5190e1950bad731aa6275b8e3a79dd97028 100644 GIT binary patch delta 107 zcmX?of$8)GrU{Ayb{^$l&*})=i9DOIepxX$MU>!WSzf;oy&K#pWkFZKWc delta 107 zcmX?of$8)GrU{AyNe0QP+oCjnY-Il*b*?&8Wuu`8k3`d~pJ9v)3=G*3i}t;V-ssV? pog>l6ta8KVSe`eIteP=r{7p9d`F;1sqi|Lj6XTT4TjosX1^`h5EJ6SP diff --git a/bgfx/shaders/dx11/vs_gui.bin b/bgfx/shaders/dx11/vs_gui.bin index 683365b786ae09a48b79ac846cc74562fc235452..7b3876797375b4226f13de8993bb797cf053bda5 100644 GIT binary patch delta 107 zcmX?of$8)GrU{Ay3+4yNt>b*6Vew3D+6A4Aw2g)$JQ9Bo{|sYfU|?WmyQki^E7fhq p;xi5nbw}oHj^%md$jV~v!0Ef$&+of89)+{Qm>5eoZ<#Zl8vs}gERFyG delta 107 zcmX?of$8)GrU{AyH4lG3mNdL{E$mpD$jS%ee>NJ5@JKYw`WeQ^z`&p`KWCE8+VlS1 pakm6kuj3cl9Lw{@ku~R%q`%2#KfmwZcofbGV`41Yyk*XGZUEF>ET{kg diff --git a/bgfx/shaders/dx11/vs_ntsc_decode.bin b/bgfx/shaders/dx11/vs_ntsc_decode.bin index b1b720b8c486a09206a08f18ac101ef4bc0502d4..29cc7d9290a378e3c8642cc0d67031cad0663870 100644 GIT binary patch delta 115 zcmX?of$8)GrU{Ayj4D-uQmQ493r}ika;CH-Z8Q|&k@$D`XBZ;`14E?rx|NGRZ1$b_ yV#=d+|8<=<$MU>!WPN$!1E=q1KR;G4rZ+a5LuY(o#G_$W7!#xQ<}Guka{~bREHbYE delta 115 zcmX?of$8)GrU{Ay5B}NKhI-a6xcBFF&b)o?bsG&ucqAHU{S0GdU|{&uEcfiC%1fUe xLCoeE;&V(k$MU>!WMx#^>2I>x&yUrMNvm{o=!_4Hcr?rkV`7}RdCQ#X+yHtaFh2kQ diff --git a/bgfx/shaders/dx11/vs_ntsc_encode.bin b/bgfx/shaders/dx11/vs_ntsc_encode.bin index 2626aceeb7aa4d3a455452dbe4e25be8b45f7c3b..bbcbf4ede893755ac58c8cc13595d8e0b70104a1 100644 GIT binary patch delta 115 zcmX?of$8)GrU{AyRff_oD=#h5wvM=-B>3MtZ=<0IkHp`@Kf@Rq7#R8@mqo`bee>$P xoh^8@D|GJWSe`eItSQ&hIDI$!`LTL2Sw?RTo$-MYkA_)cOpI-tx6GN&4FJsIFYo{W delta 115 zcmX?of$8)GrU{Ayv0qK=)-{-1yY++Rto-jki5m??cqAHU{S0GdU|=xwwRGXgEAU#W xDYBh+ckZ^$u{>`aS!e&S_cz(>=f~>BbT)5u=!_4Hcr?rkV`5yqdCQ#X+yLJKE+qf} diff --git a/bgfx/shaders/dx11/vs_phosphor.bin b/bgfx/shaders/dx11/vs_phosphor.bin index 8cd89f18b9949213f8020a0adebded5e46be6930..07edbef7bad21f03ef7db67232e3bc7409f92236 100644 GIT binary patch delta 148 zcmX?of$8)GrU{AyXH>5|K3N_#v!cuA`zhAeX&VhicqINF{u#!|z`$^QQP`8S9h&Zo zbo50I|B-sQIhN;*BWv5cKu+JyetxW8OdcGYLuY(o#G_$W7?Y9-&?p4RP0Y+=$ji@5 U1q$iz()-BB;KQ-`>YOre0BTh@Z2$lO delta 148 zcmX?of$8)GrU{Ay8UhU0zkJ))AnF~ZeZsjtXQQDAk3_?)pJ9v)3=BaQnO~n;w>U4_ zxrec6W>wziSe`eItZQCs`I~I^^JDd5>d4s~I^zQ)9u2d?n3QsWMj=3MVrCvgUVdIG UP)K)|-bY4;&YaCx=ag{+0P-w00{{R3 diff --git a/bgfx/shaders/dx11/vs_post.bin b/bgfx/shaders/dx11/vs_post.bin index a8827bacda26a3ce03628e4c4a26bee03c09e36d..5362d6c50ebfaa73642ed24039def296e1417830 100644 GIT binary patch delta 123 zcmcb9k?HzHrU{+`nm0o?KQ@Zg-n?64d#LE2Tu95$2y delta 123 zcmcb9k?HzHrU{+`T6I~O&Ds-xrLFaewrwqawlT7TN1}1o&oD*?28O9=H{+iBv^X?d zYN@|o+9198CC?j2&WU@2{7pJ9GBQpUWY*uz>wn3c>Ac(KhqFE~;?X!KjES*yv%~!9 FoB+s2Gwc8W diff --git a/bgfx/shaders/dx11/vs_prescale.bin b/bgfx/shaders/dx11/vs_prescale.bin index 4daaf3d75323879b759371d5d84efea6a873739b..dee008391ae82c9436dddeacf8fd1277a227074a 100644 GIT binary patch delta 148 zcmX?of$8)GrU{Ay8~JCK2`^3AlrOLFp!@a|#f^p{JQ9Bo{|sYfU|^V~s{Kk_Tgq>t zV!*G>(w{mu$MU>!WIc6b1E=q1KR;G4rvHYULuY(o#G_$W7?V;K&?p4RP0Y+=$ji@5 U1q$iz()-BB@Xv7b)j4I{01Y!XPXGV_ delta 148 zcmX?of$8)GrU{Ayj4tb!Pc3tpdX_hTPxi#izcw0*@JKYy`WeQ^z`$@~!^I7CDL*}% zDtDjV%DcjMb1csrM^=mMW`C2-etxW8O!MnEhtBxGh)2V$FeatBK%)>KH!(AhAum5K V6)2>;OYb8i!_@lCSLc**0{~x#Iu`%{ diff --git a/bgfx/shaders/dx11/vs_screen.bin b/bgfx/shaders/dx11/vs_screen.bin index c3c17a3621c943bd580677aee68bc86eb6880434..9d5426f76be6c4d274c974bd2e897f28ebc305c0 100644 GIT binary patch delta 107 zcmX?of$8)GrU{Ayj7;oFtebyIc{MMpGk)bJzR^&GN8;b%pJ9v)3=9(CpT3Gt`Qx+P pd}`85qw|+H$MU>!WM$F5$LYJ-&+of89)+{Qm>4TJZ<#Zl8vsq)E&~7n delta 107 zcmX?of$8)GrU{AyuXP^(Xa3o9-SwDsnAq>>4I2$bcqAHU{S0GdU|`7ij1vBJv)Oyz pg9lYn_p3HFF(v>2 diff --git a/bgfx/shaders/dx9/fs_ntsc_decode.bin b/bgfx/shaders/dx9/fs_ntsc_decode.bin index 1ebb95262809be01d25cf24c2e42b8dd38065e80..e31c3548b83396eb1f2cc364991e19ac15e5d69c 100644 GIT binary patch literal 8356 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 DGm#wt literal 6640 zcmcIpOK;mo5SEMfP!~bbTaVitV3IVWA!ketSTP=>5h+Asw~|JIMBG`uYhPdo~dO$H6(z|tXY<~>ao6B-fFVntkhav z&#QYiuNHUBY+?4od>xp--!}jCO8r$Ym(^S~*Vl_`sj0WK<7u;+nb|KEYFRyjjPU#K zx4quOc)qS@H{!OwxxEt)RVl@TDw|0&A6y=9ET*ss$IGUfU%~onR$n*sse9PdW?+ZW zZD7@CI9#}S32&}SA0_%>20y{eP3he4wFR-g)%fK$rvb*r5vqA^BPjEvI)74=N$~cpzR02#DosUV)k;(({=cB>fH&dyurj1E3N)DIV0v- zgMt8AC2u`>%A1GVPomW{;!fyU)Rwbm=2+1#kUQ}})9M81c3Q@j-~^uz7?WJnZW?J8 zo#+m-Kp%Ek5Gmpe9*>kP*$YrCrspU{%X<&D5JiuBX!P8nO?{;lQHE=Z(4vU=7IAu! zB^TfxyWY@>9rw^voO?+VPexl2bVnfUKFw&oxT#XFWy7)_0q4^24z~o z%ApV@ajqxLco`W6{k}MLq)gbevv{DbwUs#K>y~&1I3uSoaZKr|n{w(22UMEc*cikq z68@hAV^srDh(|H89xCAD|;3{VV-c8*Qo!tbBfn`!$xsQskpQ!b0oV_UMwTo z1t=K@E*Bcq~w`POkTo5xM`>fuY6Q63kSJ zT3l3&jGO0@3Xk_h|IpcI5X%DB{U@fDvRSZ5dnPKY$ka*_Rwz}G7Wf4zl#8NC&ASp~ zn>ImVTqDyo%#un$%aW==#MSguu*@j;Gs{e8e`HBz_>-`t^xm?h1dmc;7YBOU$D$vn z*UZmN8RaJANR{}La5M?4zJ?&QJ_jBY&hX$OI<>Zn!7NA0pe*Sp@5UPvj2FY1{M z$t-iaF&LOw*&bDR_!%*SL1uj0126XkPu0K$58W6yqnYgt0x1Cx9|&HW65)Z*_X97f zuDIZH7ks``^K|%7@P4t8y4Y~{fQ63kxTXkrmn^z-^-X)k^*g)hi}SXnLJIgn!4|HM zp)jHbDx%8nmf3A*+r~leXpp6;aGs5dJ#9o~(X~Ss8FO&%kP*KJI5-+hLmceQf?6*4+~U9$B0(Pb1UEI{ems-~Y2d0^vZqM6&O-EM5p{`!c$CxC zsYtffdBvi diff --git a/bgfx/shaders/glsl/fs_ntsc_decode.bin b/bgfx/shaders/glsl/fs_ntsc_decode.bin index 768cfe694da1dff0f40102cc49e6fdf16fee854c..2ba4513f445ba07243a012f414992fb9669579ed 100644 GIT binary patch literal 6050 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 biY#DnHR@L-rBqYGuLm0q2S08c9v=J;^I5!@ literal 7098 zcmcIp&2HO95O#r{{0hBnF9jJZj7Tme8EFa>1%l)d1VzvmMPMu#in3WqqRpRJN{~|@ zr%%;a=o55i_FtwISx9`Kxx3t%Z~kXj&)>ZG_M5-|`}gGJpYKji`nFnMvUR>H+v~h2 z*{baF<XvV=@_E_3TwnJc`*_OOVp-=MXYWN(FY9LfR8J)^)s>r~ zuA4c`ej29py6-fht9-fO>~bldH~Hl+NbKHSzpbl9-K<>xy=d#cDM~S~R;>ZSSub+& zK412wH}`H}t|$g3>w&qp$k(E)RzAsf-4$2jwwiZW9;>ZbH06zGK&SP(_4ibJ)^7H! z{Z(~c*@$|vXv@yyrdIM*-LGK zltcgirpTA2$egJcuSwxz;>`Uarq1YjA#Ow>X8u$KQ|JEFjficia0dG-5y$>F+f>Aa zS|Nguwuy)dwlfurm~cyJyVdpkyb&?sHUsudDkC6OMpBUhYRc$$!~!CkgfuUz$cf)D z3>|EmEa|}vfQQ`KM-YrUMxqV;u_x}5jZ?Y!NU1#F(RjqX$1q>gxaK?c_&QOzLwp=% zBj!D%OsG{Kf* z8Nei^PNqIbRhjRQbSinYg}=M>biM|9l=if>#^@#9LyD|3{-NLNnsMm&(2cO5f|6LR z=jBGAmBvra;72y$c69cP@sL^t*D2sN_` zO2JSj-a@&0#`IT10)f8+AssMs3)$O5oa#wstV#KIQU(=Bi;zmB@*}8#oa&(WM1Qg| z#3%TL|HM32)U6Rvk=vIPZOU|NUXo~$T)(i&r5a|T&q%qZMjLNCkgv~pP*+rZEJLb4 zfvM?Vo?%M0#xP7}wLyl|1AGOBR6s04Dj_H#cAPeTznDf-KZ~W5#gHFW{jVUON^I2v z!cYe<_{}pfL+%s>oq(-cFdr(Xrfljxl&^kb<+3eR?)JAD#?r~);D!0ikIPggJr5~3 zoMG&Nq(TNc=ngw;BUMS*Lz=Sh4dcU*QtpN; zB^{J$>NIjNP?0hmQ@HuFVh#qG@@o$~e=vBe11@;z*-TfP^8Mg(^HJcrDh?j_?4jT} z)f5+e=7P`mf~U>Lf%gjymxac33|QjmplwQkcbucsU8q_lbH+|*A$x4wDx`r|Ahv8B zLgSqJr+})uUu1`N18o(~{GL{ts|x2?Y4TtzQDJngG;ysYPxy=t*Bp+UkF%104&ZbS zpl$#U-&XcSd5L6VR5DP)(&>Xmr`r}+bhs9=(KX%gpa<2zq13?rg8|1HqmxsD?Yp*n zJS@B4_;YIf)fR8NPHj7?^Sg3RUAenm_DFDh=pcbZh?K-R@doA{n)ZNBHle<+2sOdX zA(Gv5lHq={%`xX{GV_z6-J4cIF3-_Lx{vtJO&_f zG##gs28ENMM2TLLO`^>f3G1;ZdlKE+r8tXj5fB~O>&X30i%c;bvl-r|m@5JKbD9Lz Rl<>33T9Jcabxu!D{s$}A-M;_; diff --git a/hlsl/ntsc.fx b/hlsl/ntsc.fx index 94460ea6be0..89cf5880d57 100644 --- a/hlsl/ntsc.fx +++ b/hlsl/ntsc.fx @@ -49,7 +49,6 @@ struct PS_INPUT uniform float2 ScreenDims; uniform float2 SourceDims; -uniform float2 SourceRect; VS_OUTPUT vs_main(VS_INPUT Input) { @@ -108,10 +107,7 @@ static const int HalfSampleCount = SampleCount / 2; float4 GetCompositeYIQ(float2 TexCoord) { - float2 SourceTexelDims = 1.0f / SourceDims; - float2 SourceRes = SourceDims * SourceRect; - - float2 PValueSourceTexel = float2(PValue, 0.0f) * SourceTexelDims; + float2 PValueSourceTexel = float2(PValue / SourceDims.x, 0.0f); float2 C0 = TexCoord + PValueSourceTexel * OffsetX.x; float2 C1 = TexCoord + PValueSourceTexel * OffsetX.y; @@ -124,8 +120,8 @@ float4 GetCompositeYIQ(float2 TexCoord) float4 Texel2 = tex2D(DiffuseSampler, C2); float4 Texel3 = tex2D(DiffuseSampler, C3); - float4 HPosition = Cx / SourceRect.x; - float4 VPosition = Cy / SourceRect.y; + float4 HPosition = Cx; + float4 VPosition = Cy; float4 Y = float4(dot(Texel0, YDot), dot(Texel1, YDot), dot(Texel2, YDot), dot(Texel3, YDot)); float4 I = float4(dot(Texel0, IDot), dot(Texel1, IDot), dot(Texel2, IDot), dot(Texel3, IDot)); @@ -135,7 +131,7 @@ float4 GetCompositeYIQ(float2 TexCoord) float WoPI = W / PI; float HOffset = (BValue + SignalOffset) / WoPI; - float VScale = (AValue * SourceRes.y) / WoPI; + float VScale = (AValue * SourceDims.y) / WoPI; float4 T = HPosition + HOffset + VPosition * VScale; float4 TW = T * W; @@ -149,10 +145,7 @@ float4 ps_main(PS_INPUT Input) : COLOR { float4 BaseTexel = tex2D(DiffuseSampler, Input.TexCoord); - float2 SourceTexelDims = 1.0f / SourceDims; - float2 SourceRes = SourceDims * SourceRect; - - float TimePerSample = ScanTime / (SourceRes.x * 4.0f); + float TimePerSample = ScanTime / (SourceDims.x * 4.0f); float Fc_y1 = (CCValue - NotchHalfWidth) * TimePerSample; float Fc_y2 = (CCValue + NotchHalfWidth) * TimePerSample; @@ -175,23 +168,22 @@ float4 ps_main(PS_INPUT Input) : COLOR float WoPI = W / PI; float HOffset = (BValue + SignalOffset) / WoPI; - float VScale = (AValue * SourceRes.y) / WoPI; + float VScale = (AValue * SourceDims.y) / WoPI; float4 YAccum = 0.0f; float4 IAccum = 0.0f; float4 QAccum = 0.0f; float4 Cy = Input.TexCoord.y; - float4 VPosition = Cy / SourceRect.y; + float4 VPosition = Cy; for (float i = 0; i < SampleCount; i += 4.0f) { float n = i - HalfSampleCount; - float4 n4 = n + NotchOffset; - float4 Cx = Input.TexCoord.x + SourceTexelDims.x * (n4 * 0.25f); - float4 HPosition = Cx / SourceRect.x; + float4 Cx = Input.TexCoord.x + (n4 * 0.25f) / SourceDims.x; + float4 HPosition = Cx; float4 C = GetCompositeYIQ(float2(Cx.r, Cy.r)); diff --git a/src/osd/modules/render/bgfx/shaders/fs_ntsc_decode.sc b/src/osd/modules/render/bgfx/shaders/fs_ntsc_decode.sc index cc8f633bf5b..dda326cd692 100644 --- a/src/osd/modules/render/bgfx/shaders/fs_ntsc_decode.sc +++ b/src/osd/modules/render/bgfx/shaders/fs_ntsc_decode.sc @@ -43,8 +43,15 @@ void main() 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); + int iSampleCount = 64; + vec4 SampleCount = vec4(64.0, 64.0, 64.0, 64.0); + vec4 HalfSampleCount = SampleCount / two; + vec4 TimePerSample = u_scan_time.xxxx / (u_source_dims.xxxx * four); + vec4 PI = vec4(3.1415927, 3.1415927, 3.1415927, 3.1415927); + vec4 PI2 = vec4(6.2831854, 6.2831854, 6.2831854, 6.2831854); + 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; @@ -52,9 +59,15 @@ void main() vec4 Fc_q = u_q_freq_response.xxxx * TimePerSample; vec4 Fc_i_2 = Fc_i * two; vec4 Fc_q_2 = Fc_q * two; - - const vec4 PI = vec4(3.1415927, 3.1415927, 3.1415927, 3.1415927); - const vec4 PI2 = vec4(6.2831854, 6.2831854, 6.2831854, 6.2831854); + vec4 Fc_y1_2 = Fc_y1 * two; + vec4 Fc_y2_2 = Fc_y2 * two; + vec4 Fc_y3_2 = Fc_y3 * two; + vec4 Fc_i_pi2 = Fc_i * PI2; + vec4 Fc_q_pi2 = Fc_q * PI2; + vec4 Fc_y1_pi2 = Fc_y1 * PI2; + vec4 Fc_y2_pi2 = Fc_y2 * PI2; + vec4 Fc_y3_pi2 = Fc_y3 * PI2; + vec4 PI2Length = PI2 / SampleCount; vec4 W = PI2 * u_cc_value.xxxx * u_scan_time.xxxx; vec4 WoPI = W / PI; @@ -66,39 +79,35 @@ void main() vec4 IAccum = zero; vec4 QAccum = zero; - for (int index = 0; index < 64; index = index + 4) + vec4 Cy = v_texcoord0.yyyy; + vec4 VPosition = Cy; + + for (int i = 0; i < 64; i = i + 4) { - float n = float(index); - vec4 n4 = vec4(n, n, n, n) + vec4(0.0, 1.0, 2.0, 3.0); + vec4 n = vec4(i, i, i, i) - vec4(32.0, 32.0, 32.0, 32.0); + vec4 n4 = n + vec4(0.0, 1.0, 2.0, 3.0); - vec4 Cx = v_texcoord0.xxxx + u_source_dims.xxxx * (n4 * quarter); + vec4 Cx = v_texcoord0.xxxx + (n4 * quarter) / u_source_dims.xxxx; + vec4 HPosition = Cx; - // theory: What if we put white in the input of the NTSC decode shader? - vec4 C = texture2D(s_tex, vec2(Cx.x, v_texcoord0.y)); + vec4 C = texture2D(s_tex, vec2(Cx.x, Cy.x)); - vec4 T = Cx + HOffset + v_texcoord0.yyyy * VScale; + 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 SincKernel = vec4(0.54, 0.54, 0.54, 0.54) + vec4(0.46, 0.46, 0.46, 0.46) * cos(PI2Length * 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; - - SincYIn1 = SincYIn1 == zero ? one : SincYIn1; - SincYIn2 = SincYIn2 == zero ? one : SincYIn2; - SincYIn3 = SincYIn3 == zero ? one : SincYIn3; - - SincIIn = SincIIn == zero ? one : SincIIn; - SincQIn = SincQIn == zero ? one : SincQIn; + 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 IdealY = (Fc_y1_2 * SincY1 - Fc_y2_2 * SincY2) + Fc_y3_2 * SincY3; vec4 IdealI = Fc_i_2 * (SincIIn != zero ? sin(SincIIn) / SincIIn : one); vec4 IdealQ = Fc_q_2 * (SincQIn != zero ? sin(SincQIn) / SincQIn : one); diff --git a/src/osd/modules/render/bgfx/shaders/fs_ntsc_encode.sc b/src/osd/modules/render/bgfx/shaders/fs_ntsc_encode.sc index 3aeac29d20d..21bbb39240e 100644 --- a/src/osd/modules/render/bgfx/shaders/fs_ntsc_encode.sc +++ b/src/osd/modules/render/bgfx/shaders/fs_ntsc_encode.sc @@ -65,7 +65,7 @@ void main() float HOffset = (u_a_value.x + u_jitter_amount.x * u_jitter_offset.x) / WoPI; float VScale = (u_b_value.x * u_source_dims.y) / WoPI; - vec4 T = Cx + vec4(HOffset, HOffset, HOffset, HOffset) + Cy * vec4(VScale, VScale, VScale, VScale); + vec4 T = HPosition + vec4(HOffset, HOffset, HOffset, HOffset) + VPosition * vec4(VScale, VScale, VScale, VScale); vec4 TW = T * W; gl_FragColor = Y + I * cos(TW) + Q * sin(TW);