From 7e5e0bc2485efd3fc4dbe620eab1fa77d86dea94 Mon Sep 17 00:00:00 2001 From: getdls <25286924+getdls@users.noreply.github.com> Date: Sat, 18 Jan 2020 13:51:11 +0100 Subject: [PATCH] [MK8] Scaling and res fixes Scale 4p bloom, textboxes, cup win, in engine AA, Mk tv replays, 19->1f conversion --- .../8e1337dde42fd224_00000000000003c9_ps.txt | 186 +++++++++++++ Resolutions/MarioKart8_Resolution/rules.txt | 247 ++++++++++++++++++ 2 files changed, 433 insertions(+) create mode 100644 Resolutions/MarioKart8_Resolution/8e1337dde42fd224_00000000000003c9_ps.txt diff --git a/Resolutions/MarioKart8_Resolution/8e1337dde42fd224_00000000000003c9_ps.txt b/Resolutions/MarioKart8_Resolution/8e1337dde42fd224_00000000000003c9_ps.txt new file mode 100644 index 00000000..27bc0b89 --- /dev/null +++ b/Resolutions/MarioKart8_Resolution/8e1337dde42fd224_00000000000003c9_ps.txt @@ -0,0 +1,186 @@ +#version 430 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +// shader 8e1337dde42fd224 //AA scaling. Used in in 3d views except gameplay +// start of shader inputs/outputs, predetermined by Cemu. Do not touch +#ifdef VULKAN +#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location) +#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140) +#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation) +#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw) +#else +#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location) +#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140) +#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation) +#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw) +#endif +#ifdef VULKAN +layout(set = 1, binding = 2) uniform ufBlock +{ +uniform ivec4 uf_remappedPS[4]; +uniform vec4 uf_fragCoordScale; +}; +#else +uniform ivec4 uf_remappedPS[4]; +uniform vec2 uf_fragCoordScale; +#endif +TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0; +TEXTURE_LAYOUT(1, 1, 1) uniform sampler2D textureUnitPS1; +layout(location = 0) in vec4 passParameterSem2; +layout(location = 0) out vec4 passPixelColor0; +// end of shader inputs/outputs +int clampFI32(int v) +{ +if( v == 0x7FFFFFFF ) + return floatBitsToInt(1.0); +else if( v == 0xFFFFFFFF ) + return floatBitsToInt(0.0); +return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0)); +} +float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; } +void main() +{ +vec4 R0f = vec4(0.0); +vec4 R1f = vec4(0.0); +vec4 R2f = vec4(0.0); +vec4 R3f = vec4(0.0); +vec4 R4f = vec4(0.0); +vec4 R123f = vec4(0.0); +vec4 R126f = vec4(0.0); +vec4 R127f = vec4(0.0); +float backupReg0f, backupReg1f, backupReg2f, backupReg3f, backupReg4f; +vec4 PV0f = vec4(0.0), PV1f = vec4(0.0); +float PS0f = 0.0, PS1f = 0.0; +vec4 tempf = vec4(0.0); +float tempResultf; +int tempResulti; +ivec4 ARi = ivec4(0); +bool predResult = true; +bool activeMaskStack[2]; +bool activeMaskStackC[3]; +activeMaskStack[0] = false; +activeMaskStackC[0] = false; +activeMaskStackC[1] = false; +activeMaskStack[0] = true; +activeMaskStackC[0] = true; +activeMaskStackC[1] = true; +vec3 cubeMapSTM; +int cubeMapFaceId; +float resScale = uf_fragCoordScale.x; +R0f = passParameterSem2; +if( activeMaskStackC[1] == true ) { +R1f.xyzw = (textureGather(textureUnitPS1, R0f.xy).wzxy); +R2f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw); +} +if( activeMaskStackC[1] == true ) { +activeMaskStack[1] = activeMaskStack[0]; +activeMaskStackC[2] = activeMaskStackC[1]; +// 0 +PV0f.x = R1f.y + R1f.x; +R127f.y = intBitsToFloat(uf_remappedPS[0].z); +PV0f.z = R1f.w + -(R1f.x); +PV0f.w = R1f.z + -(R1f.y); +R127f.z = mul_nonIEEE(R2f.x, intBitsToFloat(uf_remappedPS[1].x)); +PS0f = R127f.z; +// 1 +R127f.x = PV0f.w + -(PV0f.z); +PV1f.x = R127f.x; +R126f.y = PV0f.w + PV0f.z; +PV1f.y = R126f.y; +PV1f.z = R1f.z + PV0f.x; +R127f.w = min(R1f.z, R1f.x); +R126f.w = min(R1f.w, R1f.y); +PS1f = R126f.w; +// 2 +PV0f.x = R1f.w + PV1f.z; +PV0f.y = max(PV1f.x, -(PV1f.x)); +PV0f.z = max(PV1f.y, -(PV1f.y)); +PV0f.w = max(R1f.z, R1f.x); +PS0f = max(R1f.w, R1f.y); +// 3 +PV1f.x = min(PV0f.z, PV0f.y); +R123f.y = (mul_nonIEEE(R2f.y,intBitsToFloat(uf_remappedPS[1].y)) + R127f.z); +PV1f.y = R123f.y; +PV1f.z = min(R127f.w, R126f.w); +R123f.w = (mul_nonIEEE(R127f.y,PV0f.x) + intBitsToFloat(uf_remappedPS[0].w)*resScale); +PV1f.w = R123f.w; +PS1f = max(PV0f.w, PS0f); +// 4 +PV0f.x = mul_nonIEEE(PS1f, intBitsToFloat(uf_remappedPS[2].x)); +PV0f.y = max(PV1f.y, PS1f); +PV0f.z = min(PV1f.y, PV1f.z); +PV0f.w = max(PV1f.w, PV1f.x); +// 5 +R3f.x = max(PV0f.x, intBitsToFloat(uf_remappedPS[2].y)); +R3f.y = -(PV0f.z) + PV0f.y; +PS1f = 1.0 / PV0f.w; +// 6 +PV0f.x = mul_nonIEEE(R127f.x, PS1f); +PV0f.y = mul_nonIEEE(R126f.y, PS1f); +// 7 +PV1f.z = max(PV0f.x, -(intBitsToFloat(uf_remappedPS[0].y))); +PV1f.w = max(PV0f.y, -(intBitsToFloat(uf_remappedPS[0].y))); +// 8 +R1f.x = min(PV1f.w, intBitsToFloat(uf_remappedPS[0].y)); +R1f.y = min(PV1f.z, intBitsToFloat(uf_remappedPS[0].y)); +// 9 +predResult = (R3f.y > R3f.x); +activeMaskStack[1] = predResult; +activeMaskStackC[2] = predResult == true && activeMaskStackC[1] == true; +} +else { +activeMaskStack[1] = false; +activeMaskStackC[2] = false; +} +if( activeMaskStackC[2] == true ) { +// 0 +R3f.x = (mul_nonIEEE(R1f.x,-(intBitsToFloat(uf_remappedPS[3].z)*resScale)) + R0f.x); +R3f.y = (mul_nonIEEE(R1f.y,-(intBitsToFloat(uf_remappedPS[3].w)*resScale)) + R0f.y); +R0f.z = (mul_nonIEEE(R1f.x,intBitsToFloat(uf_remappedPS[3].x)) + R0f.x); +R0f.w = (mul_nonIEEE(R1f.y,intBitsToFloat(uf_remappedPS[3].y)) + R0f.y); +R3f.z = (mul_nonIEEE(R1f.x,intBitsToFloat(uf_remappedPS[3].z)) + R0f.x); +PS0f = R3f.z; +// 1 +R4f.x = (mul_nonIEEE(R1f.x,-(intBitsToFloat(uf_remappedPS[3].x)*resScale)) + R0f.x); +R4f.y = (mul_nonIEEE(R1f.y,-(intBitsToFloat(uf_remappedPS[3].y)*resScale)) + R0f.y); +R3f.w = (mul_nonIEEE(R1f.y,intBitsToFloat(uf_remappedPS[3].w)) + R0f.y); +} +if( activeMaskStackC[2] == true ) { +R1f.xyzw = (texture(textureUnitPS0, R0f.zw).xyzw); +R0f.xyzw = (texture(textureUnitPS0, R3f.zw).xyzw); +R3f.xyzw = (texture(textureUnitPS0, R3f.xy).xyzw); +R2f.xyzw = (texture(textureUnitPS0, R4f.xy).xyzw); +} +if( activeMaskStackC[2] == true ) { +// 0 +R127f.x = R0f.w + R1f.w; +R127f.x /= 2.0; +R127f.y = R0f.z + R1f.z; +R127f.y /= 2.0; +R127f.z = R0f.y + R1f.y; +R127f.z /= 2.0; +R127f.w = R0f.x + R1f.x; +R127f.w /= 2.0; +// 1 +PV1f.x = R2f.w + R3f.w; +PV1f.x /= 2.0; +PV1f.y = R2f.z + R3f.z; +PV1f.y /= 2.0; +PV1f.z = R2f.y + R3f.y; +PV1f.z /= 2.0; +PV1f.w = R2f.x + R3f.x; +PV1f.w /= 2.0; +// 2 +R2f.x = R127f.w + PV1f.w; +R2f.x /= 2.0; +R2f.y = R127f.z + PV1f.z; +R2f.y /= 2.0; +R2f.z = R127f.y + PV1f.y; +R2f.z /= 2.0; +R2f.w = R127f.x + PV1f.x; +R2f.w /= 2.0; +} +activeMaskStackC[1] = activeMaskStack[0] == true && activeMaskStackC[0] == true; +// export +passPixelColor0 = vec4(R2f.x, R2f.y, R2f.z, R2f.w); +} diff --git a/Resolutions/MarioKart8_Resolution/rules.txt b/Resolutions/MarioKart8_Resolution/rules.txt index 58d2a711..60c68a2f 100644 --- a/Resolutions/MarioKart8_Resolution/rules.txt +++ b/Resolutions/MarioKart8_Resolution/rules.txt @@ -239,6 +239,24 @@ height = 360 formats = 0x816 overwriteFormat = 0x820 +[TextureRedefine] +width = 1280 +height = 720 +formats = 0x019 +overwriteFormat = 0x01f + +[TextureRedefine] +width = 320 +height = 192 +formats = 0x019 +overwriteFormat = 0x01f + +[TextureRedefine] +width = 320 +height = 180 +formats = 0x019 +overwriteFormat = 0x01f + # Full Res [TextureRedefine] width = 1280 @@ -302,6 +320,20 @@ formats = 0x80e,0x01a,0x806,0x816,0x801,0x019,0x001 overwriteWidth = ($width/$gameWidth) * 640 overwriteHeight = ($height/$gameHeight) * 320 +[TextureRedefine] # depth applied +width = 448 +height = 240 +formats = 0x1a,0x816 +overwriteWidth = ($width/$gameWidth) * 448 +overwriteHeight = ($height/$gameHeight) * 240 + +[TextureRedefine] # depth applied +width = 427 +height = 240 +formats = 0x1a,0x816 +overwriteWidth = ($width/$gameWidth) * 427 +overwriteHeight = ($height/$gameHeight) * 240 + [TextureRedefine] # MP Selection Menu - Depth Map width = 768 height = 768 @@ -354,6 +386,13 @@ formats = 0x019 overwriteWidth = ($width/$gameWidth) * 320 overwriteHeight = ($height/$gameHeight) * 180 +[TextureRedefine]#Depth +width = 256 +height = 256 +formats = 0x80e +overwriteWidth = ($width/$gameWidth) * 256 +overwriteHeight = ($height/$gameHeight) * 256 + [TextureRedefine] width = 256 height = 128 @@ -361,6 +400,13 @@ formats = 0x816 overwriteWidth = ($width/$gameWidth) * 256 overwriteHeight = ($height/$gameHeight) * 128 +[TextureRedefine]#Depth +width = 160 +height = 160 +formats = 0x80e +overwriteWidth = ($width/$gameWidth) * 160 +overwriteHeight = ($height/$gameHeight) * 160 + [TextureRedefine] width = 160 height = 90 @@ -375,6 +421,13 @@ formats = 0x816 overwriteWidth = ($width/$gameWidth) * 160 overwriteHeight = ($height/$gameHeight) * 96 +[TextureRedefine]#Depth +width = 148 +height = 148 +formats = 0x80e +overwriteWidth = ($width/$gameWidth) * 148 +overwriteHeight = ($height/$gameHeight) * 148 + [TextureRedefine] width = 128 height = 64 @@ -410,6 +463,28 @@ formats = 0x816 overwriteWidth = ($width/$gameWidth) * 96 overwriteHeight = ($height/$gameHeight) * 48 +[TextureRedefine] #4p bloom +width = 32 +height = 16 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 32 +overwriteHeight = ($height/$gameHeight) * 16 + +[TextureRedefine] #4p bloom +width = 24 +height = 16 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 24 +overwriteHeight = ($height/$gameHeight) * 16 + +[TextureRedefine]#4p bloom +width = 20 +height = 11 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 20 +overwriteHeight = ($height/$gameHeight) * 11 + + # Underwater effect [TextureRedefine] # 1P width = 640 @@ -439,3 +514,175 @@ formats = 0x19,0x1a,0x806,0x816 overwriteWidth = ($width/$gameWidth) * 320 overwriteHeight = ($height/$gameHeight) * 360 +[TextureRedefine] #Cup win board +width = 560 +height = 64 +#formats = 0x019 #,0x01a,0x806,0x816 +overwriteWidth = ($width/$gameWidth) * 560 +overwriteHeight = ($height/$gameHeight) * 64 + +[TextureRedefine] #Cup win board +width = 160 +height = 16 +#formats = 0x019 #,0x01a,0x806,0x816 +overwriteWidth = ($width/$gameWidth) * 160 +overwriteHeight = ($height/$gameHeight) * 16 + +[TextureRedefine] #Cup win board +width = 140 +height = 16 +#formats = 0x019 #,0x01a,0x806,0x816 +overwriteWidth = ($width/$gameWidth) * 140 +overwriteHeight = ($height/$gameHeight) * 16 + +[TextureRedefine]#MKtv depth, normals +width = 960 +height = 544 +formats = 0x80e,0x019,0x816 +overwriteWidth = ($width/$gameWidth) * 960 +overwriteHeight = ($height/$gameHeight) * 544 + +[TextureRedefine]#MKtv depth, normals +width = 960 +height = 540 +formats = 0x80e,0x019,0x816 +overwriteWidth = ($width/$gameWidth) * 960 +overwriteHeight = ($height/$gameHeight) * 540 + +[TextureRedefine]#MKtv depth, normals +width = 960 +height = 536 +formats = 0x80e,0x019,0x816 +overwriteWidth = ($width/$gameWidth) * 960 +overwriteHeight = ($height/$gameHeight) * 536 + +[TextureRedefine]#MKtv +width = 480 +height = 272 +formats = 0x816,0x01a +overwriteWidth = ($width/$gameWidth) * 480 +overwriteHeight = ($height/$gameHeight) * 272 + +[TextureRedefine]#MKtv +width = 480 +height = 268 +formats = 0x816,0x01a +overwriteWidth = ($width/$gameWidth) * 480 +overwriteHeight = ($height/$gameHeight) * 268 + +[TextureRedefine]#MKtv +width = 256 +height = 256 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 256 +overwriteHeight = ($height/$gameHeight) * 256 + +[TextureRedefine]#MKtv +width = 256 +height = 144 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 256 +overwriteHeight = ($height/$gameHeight) * 144 + +[TextureRedefine]#MKtv bloom / blur +width = 240 +height = 134 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 240 +overwriteHeight = ($height/$gameHeight) * 134 + +[TextureRedefine]#MKtv bloom / blur +width = 128 +height = 128 +formats = 0x816 +depth = 1 +overwriteWidth = ($width/$gameWidth) * 128 +overwriteHeight = ($height/$gameHeight) * 128 + +[TextureRedefine]#MKtv bloom / blur +width = 128 +height = 80 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 128 +overwriteHeight = ($height/$gameHeight) * 80 + +[TextureRedefine]#MKtv bloom / blur +width = 120 +height = 67 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 120 +overwriteHeight = ($height/$gameHeight) * 67 + +[TextureRedefine]#MKtv bloom / blur +width = 64 +height = 64 +formats = 0x816 +depth = 1 +overwriteWidth = ($width/$gameWidth) * 64 +overwriteHeight = ($height/$gameHeight) * 64 + +[TextureRedefine]#MKtv bloom / blur +width = 64 +height = 48 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 64 +overwriteHeight = ($height/$gameHeight) * 48 + +[TextureRedefine]#MKtv bloom / blur +width = 60 +height = 33 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 60 +overwriteHeight = ($height/$gameHeight) * 33 + +[TextureRedefine]#MKtv bloom / blur +width = 60 +height = 33 +formats = 0x816 +overwriteWidth = ($width/$gameWidth) * 60 +overwriteHeight = ($height/$gameHeight) * 33 + +[TextureRedefine]#MKtv bloom / blur +width = 32 +height = 16 +formats = 0x019 +overwriteWidth = ($width/$gameWidth) * 32 +overwriteHeight = ($height/$gameHeight) * 16 + +[TextureRedefine]#MKtv bloom / blur +width = 30 +height = 16 +formats = 0x019 +overwriteWidth = ($width/$gameWidth) * 30 +overwriteHeight = ($height/$gameHeight) * 16 + +[TextureRedefine]#MKtv bloom / blur +width = 64 +height = 64 +formats = 0x005 +overwriteWidth = ($width/$gameWidth) * 64 +overwriteHeight = ($height/$gameHeight) * 64 + +[TextureRedefine]#MKtv bloom / blur +width = 60 +height = 60 +formats = 0x005 +overwriteWidth = ($width/$gameWidth) * 60 +overwriteHeight = ($height/$gameHeight) * 60 + +[TextureRedefine]#MKtv bloom / blur +width = 52 +height = 52 +formats = 0x005 +overwriteWidth = ($width/$gameWidth) * 52 +overwriteHeight = ($height/$gameHeight) * 52 + +[TextureRedefine]#MKtv bloom / blur +width = 32 +height = 32 +formats = 0x005 +overwriteWidth = ($width/$gameWidth) * 32 +overwriteHeight = ($height/$gameHeight) * 32 + + +#32x32, 16x16 cube slices - dont scale, should not be sharp