From a5ffea7278506692b5661f534d8a0f141c4d295f Mon Sep 17 00:00:00 2001 From: hunterk Date: Tue, 12 Jun 2018 12:29:38 -0500 Subject: [PATCH] add yee64 and yeetron shaders ported from reshade --- crt/shaders/yee64.slang | 171 ++++++++++++++++++++++++++++++++++++++ crt/shaders/yeetron.slang | 124 +++++++++++++++++++++++++++ crt/yee64.slangp | 3 + crt/yeetron.slangp | 4 + 4 files changed, 302 insertions(+) create mode 100644 crt/shaders/yee64.slang create mode 100644 crt/shaders/yeetron.slang create mode 100644 crt/yee64.slangp create mode 100644 crt/yeetron.slangp diff --git a/crt/shaders/yee64.slang b/crt/shaders/yee64.slang new file mode 100644 index 0000000..e0d5b17 --- /dev/null +++ b/crt/shaders/yee64.slang @@ -0,0 +1,171 @@ +#version 450 + +// ported from ReShade + +layout(push_constant) uniform Push +{ + vec4 SourceSize; + vec4 OriginalSize; + vec4 OutputSize; + uint FrameCount; +} params; + +layout(std140, set = 0, binding = 0) uniform UBO +{ + mat4 MVP; +} global; + +#pragma stage vertex +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; +} + +#pragma stage fragment +layout(location = 0) in vec2 vTexCoord; +layout(location = 0) out vec4 FragColor; +layout(set = 0, binding = 2) uniform sampler2D Source; + +void main() +{ + //Declare parameters + //pixelSize + vec4 c0 = params.SourceSize.xyzw; + //textureSize + const vec4 c1 = params.SourceSize.xyzw; + //viewSize + const vec4 c2 = params.OutputSize.xyzw; + //texDiffuse + + const vec4 c3 = vec4(-1., 0.5, 1.25, 0.); + const vec4 c4 = vec4(0.5, -0.5, 1.5, -3.); + const vec4 c5 = vec4(-1., 1., -2., 2.); + const vec4 c6 = vec4(-3., -8., 720., 0.166666672); + const vec4 c7 = vec4(-0.333000004, -0.666000009, 0.899999976, 1.20000005); + const vec4 c8 = vec4(1.5, 0.5, 2.5, 0.899999976); + + //Declare registers + vec4 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9; + + //Code starts here + vec4 v0 = vTexCoord.xyyy; + //dcl_2d s0 + r0.z = c3.w; + r1.x = 1.0 / c0.x; + r1.y = 1.0 / c0.y; + r1.xy = (r1 * c1).xy; + r1.xy = (r1 * v0).xy; + r2.x = 1.0 / c1.x; + r2.y = 1.0 / c1.y; + r1.zw = (r2.xyxy * c0.xyxy).zw; + r1.zw = (r1 * r1.xyxy).zw; + r1.xy = (r1 * c2).xy; + r2.zw = (r1 * c1.xyxy).zw; + r2.zw = fract(r2).zw; + r0.xy = (-r2.zwzw).xy; + r3.xy = (r1.zwzw * c1 + r0.xzzw).xy; + r4.yz = (r1.xzww * c1.xxyw + r0.xzyw).yz; + r3.z = r0.y + r3.y; + r5 = r3.xzxz + -c4.zyxy; + r3 = r3.xzxz + c8.xyzy; + r3 = r2.xyxy * r3; + r5 = r2.xyxy * r5; + r6 = texture(Source, r5.zw); + r5 = texture(Source, r5.xy); + r5.xyz = (r5 * c3.zzzz).xyz; + r7 = r1.zwzw * c1.xyxy + r0.xyxy; + r0.zw = (r1 * c1.xyxy + - r7).zw; + r8.x = c3.x; + r1.zw = (r1 * c1.xyxy + r8.xxxx).zw; + r1.zw = (r0.xyxy + r1).zw; + r4.x = r0.x + r4.y; + r4 = r4.xzxz + c4.xyxz; + r4 = r2.xyxy * r4; + r0.xy = (r1.zwzw + c3.yyyy).xy; + r0.xy = (r2 * r0).xy; + r8 = texture(Source, r0.xy); + r8.xyz = (r8 * c3.zzzz).xyz; + r0.xy = (r0.zwzw + -c3.yyyy).xy; + r9 = -r0.xxxx + c5; + r9 = r9 * r9; + r9 = r9 * c4.wwww; + r0.z = pow(2, r9.x); + r6.xyz = (r6 * r0.zzzz).xyz; + r6.xyz = (r6 * c3.zzzz).xyz; + r0.w = pow(2, r9.z); + r5.xyz = (r5 * r0.wwww + r6).xyz; + r0.w = r0.z + r0.w; + r6 = r7.zwzw + c4.zyxx; + r7 = r7 + c4.yzzz; + r7 = r2.xyxy * r7; + r2 = r2.xyxy * r6; + r6 = texture(Source, r2.zw); + r2 = texture(Source, r2.xy); + r2.xyz = (r2 * c3.zzzz).xyz; + r1.zw = (r0.xyxy * r0.xyxy).zw; + r0.xy = (-r0.yyyy + c5).xy; + r0.xy = (r0 * r0).xy; + r0.xy = (r0 * c6.yyyy).xy; + r1.zw = (r1 * c6.xyxy).zw; + r1.z = pow(2, r1.z); + r1.w = pow(2, r1.w); + r6.xyz = (r6 * r1.zzzz).xyz; + r5.xyz = (r6 * c3.zzzz + r5).xyz; + r6 = texture(Source, r3.xy); + r3 = texture(Source, r3.zw); + r3.xyz = (r3 * c3.zzzz).xyz; + r2.w = pow(2, r9.y); + r3.w = pow(2, r9.w); + r6.xyz = (r6 * r2.wwww).xyz; + r5.xyz = (r6 * c3.zzzz + r5).xyz; + r3.xyz = (r3 * r3.wwww + r5).xyz; + r0.w = r0.w + r1.z; + r0.w = r2.w + r0.w; + r0.w = r3.w + r0.w; + r0.w = 1.0 / r0.w; + r3.xyz = (r0.wwww * r3).xyz; + r3.xyz = (r1.wwww * r3).xyz; + r5 = texture(Source, r4.xy); + r4 = texture(Source, r4.zw); + r4.xyz = (r1.zzzz * r4).xyz; + r4.xyz = (r4 * c3.zzzz).xyz; + r5.xyz = (r5 * c3.zzzz).xyz; + r5.xyz = (r1.zzzz * r5).xyz; + r0.w = r0.z + r1.z; + r0.w = r2.w + r0.w; + r0.w = 1.0 / r0.w; + r5.xyz = (r8 * r0.zzzz + r5).xyz; + r2.xyz = (r2 * r2.wwww + r5).xyz; + r2.xyz = (r0.wwww * r2).xyz; + r0.x = pow(2, r0.x); + r0.y = pow(2, r0.y); + r2.xyz = (r2 * r0.xxxx + r3).xyz; + r3 = texture(Source, r7.xy); + r5 = texture(Source, r7.zw); + r5.xyz = (r2.wwww * r5).xyz; + r3.xyz = (r0.zzzz * r3).xyz; + r3.xyz = (r3 * c3.zzzz + r4).xyz; + r3.xyz = (r5 * c3.zzzz + r3).xyz; + r0.xzw = (r0.wwww * r3.xyyz).xzw; + r0.xyz = (r0.xzww * r0.yyyy + r2).xyz; + r1.zw = fract(r1.xyxy).zw; + r1.xy = (-r1.zwzw + r1).xy; + r1.xy = (r1 + c3.yyyy).xy; + r0.w = (r1.y * -c4.w + r1.x); + r0.w = r0.w * c6.w; + r0.w = fract(r0.w); + r1.xy = (r0.wwww + c7).xy; + r2.yz = (r1.y >= 0 ? c7.xzww : c7.xwzw).yz; + r2.x = c8.w; + r1.xyz = (r1.x >= 0 ? r2 : c7.wzzw).xyz; + r1.xyz = (r0 * r1).xyz; + r2.z = c6.z; + r0.w = r2.z + -c2.y; + FragColor.xyz = (r0.w >= 0 ? r0 : r1).xyz; + FragColor.w = -c3.x; +} \ No newline at end of file diff --git a/crt/shaders/yeetron.slang b/crt/shaders/yeetron.slang new file mode 100644 index 0000000..af6390e --- /dev/null +++ b/crt/shaders/yeetron.slang @@ -0,0 +1,124 @@ +#version 450 + +// ported from ReShade + +layout(push_constant) uniform Push +{ + vec4 SourceSize; + vec4 OriginalSize; + vec4 OutputSize; + uint FrameCount; +} params; + +layout(std140, set = 0, binding = 0) uniform UBO +{ + mat4 MVP; +} global; + +#pragma stage vertex +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; +} + +#pragma stage fragment +layout(location = 0) in vec2 vTexCoord; +layout(location = 0) out vec4 FragColor; +layout(set = 0, binding = 2) uniform sampler2D Source; + +vec4 cmp(vec4 src0, vec4 src1, vec4 src2) { + return vec4( + src0.x >= 0 ? src1.x : src2.x, + src0.y >= 0 ? src1.y : src2.y, + src0.z >= 0 ? src1.z : src2.z, + src0.w >= 0 ? src1.w : src2.w + ); +} + +void main() +{ + //Declare parameters + //pixelSize + vec4 c0 = params.SourceSize.xyzw; + //textureSize + const vec4 c1 = params.SourceSize.xyzw; + //viewSize + const vec4 c2 = params.OutputSize.xyzw; + + //Declare constants + const vec4 c3 = vec4(1.5, 0.800000012, 1.25, 0.75); + const vec4 c4 = vec4(6.28318548, -3.14159274, 0.25, -0.25); + const vec4 c5 = vec4(1., 0.5, 720., 3.); + const vec4 c6 = vec4(0.166666672, -0.333000004, -0.666000009, 0.899999976); + const vec4 c7 = vec4(0.899999976, 1.10000002, 0., 0.); + const vec4 c8 = vec4(-0.5, -0.25, 2., 0.5); + + //Declare registers + vec4 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9; + + //Code starts here + vec4 v0 = vTexCoord.xyyy; + //dcl_2d s0 + r0.x = 1.0 / c0.x; + r0.y = 1.0 / c0.y; + r0.xy = (r0 * c1).xy; + r0.xy = (r0 * v0).xy; + r0.xy = (r0 * c2).xy; + r0.zw = fract(r0.xyxy).zw; + r0.xy = (-r0.zwzw + r0).xy; + r0.xy = (r0 + c8.wwww).xy; + r0.x = r0.y * c5.w + r0.x; + r0.x = r0.x * c6.x; + r0.x = fract(r0.x); + r0.xy = (r0.xxxx + c6.yzzw).xy; + r1.yz = (r0.y >= 0 ? c7.xxyw : c7.xyxw).yz; + r1.x = c6.w; + r0.xyz = (r0.x >= 0 ? r1 : c7.yxxw).xyz; + r1.xy = (c1 * v0).xy; + r0.w = r1.y * c8.w + c8.w; + r0.w = fract(r0.w); + r0.w = r0.w * c4.x + c4.y; + r2.y = sin(r0.w); + r1.zw = (abs(r2).yyyy + c4).zw; + r1.z = clamp(r1.z, 0.0, 1.0); + r0.w = r1.w >= 0 ? r1.z : c8.w; + r2 = fract(r1.xyxy); + r1.xy = (r1 + -r2.zwzw).xy; + r2 = r2 + c8.xxyy; + r1.zw = (r1.xyxy + c8.wwww).zw; + r1.zw = (v0.xyxy * -c1.xyxy + r1).zw; + r1.w = r1.w + r1.w; + r1.z = r1.z * c8.w; + r1.z = -abs(r1).z + c3.x; + r3.x = max(c3.y, r1.z); + r4.x = min(r3.x, c3.z); + r1.zw = (-abs(r1).wwww + c3).zw; + r1.z = clamp(r1.z, 0.0, 1.0); + r1.z = r1.w >= 0 ? r1.z : c8.w; + r4.y = r0.w + r1.z; + r0.w = r0.w * r4.x; + r1.z = r1.z * r4.x; + r3.xy = (r4 * c5).xy; + r1.w = r3.y * r3.x; + r2.z = cmp(r2, r2.xyxy, c8.yyyy).z; + r3.xy = max(c8.yyyy, -r2.zwzw).xy; + r2.xy = (r2 + r3).xy; + r1.xy = (r2 * c8.zzzz + r1).xy; + r1.xy = (r1 + c8.wwww).xy; + r2.x = 1.0 / c1.x; + r2.y = 1.0 / c1.y; + r1.xy = (r1 * r2).xy; + r2 = texture(Source, r1.xy); + r3.x = r0.w * r2.x; + r3.yz = (r1.xzww * r2).yz; + FragColor.w = r2.w; + r0.xyz = (r0 * r3).xyz; + r1.z = c5.z; + r0.w = r1.z + -c2.y; + FragColor.xyz = (r0.w >= 0 ? r3 : r0).xyz; +} \ No newline at end of file diff --git a/crt/yee64.slangp b/crt/yee64.slangp new file mode 100644 index 0000000..e7fde6c --- /dev/null +++ b/crt/yee64.slangp @@ -0,0 +1,3 @@ +shaders = 1 + +shader0 = shaders/yee64.slang diff --git a/crt/yeetron.slangp b/crt/yeetron.slangp new file mode 100644 index 0000000..1d54f0c --- /dev/null +++ b/crt/yeetron.slangp @@ -0,0 +1,4 @@ +shaders = 1 + +shader0 = shaders/yeetron.slang +filter_linear0 = false