From 60614f47d0193f4271f63170ff93cf9eca1d9344 Mon Sep 17 00:00:00 2001 From: getdls Date: Fri, 2 Feb 2018 23:52:49 +0100 Subject: [PATCH] [NSMBU] Scale all, fix AA, fix bloom, fix DOF Kiri's not around, guess it's safe to commit... --- .../50e29e8929cea348_00000000000003c9_ps.txt | 199 ++++++++++++++++++ .../70b82af4d17024d2_0000000000000000_vs.txt | 83 ++++++++ .../ec4a85d51e778437_0000000000000000_vs.txt | 86 ++++++++ Source/NewSuperMarioBrosU/rules.txt | 74 ++++--- 4 files changed, 408 insertions(+), 34 deletions(-) create mode 100644 Source/NewSuperMarioBrosU/50e29e8929cea348_00000000000003c9_ps.txt create mode 100644 Source/NewSuperMarioBrosU/70b82af4d17024d2_0000000000000000_vs.txt create mode 100644 Source/NewSuperMarioBrosU/ec4a85d51e778437_0000000000000000_vs.txt diff --git a/Source/NewSuperMarioBrosU/50e29e8929cea348_00000000000003c9_ps.txt b/Source/NewSuperMarioBrosU/50e29e8929cea348_00000000000003c9_ps.txt new file mode 100644 index 00000000..ef773a48 --- /dev/null +++ b/Source/NewSuperMarioBrosU/50e29e8929cea348_00000000000003c9_ps.txt @@ -0,0 +1,199 @@ + + +#version 420 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +// shader 50e29e8929cea348 +//AA fix PS +const float resScale = ; +//old contrasty, or just copy paste clarity +const float gamma = 0.95; // 1.0 is neutral +const float exposure = 1.05; // 1.0 is neutral, first lessen to avoid truncation prob around .25 for radeon. +const float vibrance = 0.2175; // 0.0 is neutral +const float crushContrast = 0.000; // 0.0 is neutral. loss of shadow detail +const float postExposure = 1.16; // 1.0 is neutral, then slightly raise exposure back up. + +vec3 contrasty(vec3 colour) { + vec3 fColour = (colour.xyz); + + fColour = clamp(exposure * fColour, 0.0, 1.0); + fColour = pow(fColour, vec3(1.0 / gamma)); + float luminance = fColour.r*0.299 + fColour.g*0.587 + fColour.b*0.114; + float mn = min(min(fColour.r, fColour.g), fColour.b); + float mx = max(max(fColour.r, fColour.g), fColour.b); + float sat = (1.0 - (mx - mn)) * (1.0 - mx) * luminance * 5.0; + vec3 lightness = vec3((mn + mx) / 2.0); + // vibrance + fColour = mix(fColour, mix(fColour, lightness, -vibrance), sat); + fColour = max(vec3(0.0), fColour - vec3(crushContrast)); + return fColour; +} + +uniform ivec4 uf_remappedPS[3]; +layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4240800 res 1280x720x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1 +layout(binding = 1) uniform sampler2D textureUnitPS1;// Tex1 addr 0xf45c5000 res 1280x720x1 dim 1 tm: 4 format 0001 compSel: 0 4 4 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler1 ClampX/Y/Z: 2 2 2 border: 1 +layout(location = 0) in vec4 passParameterSem1; +layout(location = 0) out vec4 passPixelColor0; +uniform vec2 uf_fragCoordScale; +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 R125f = 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; +R0f = passParameterSem1; +if( activeMaskStackC[1] == true ) { +R1f.xyzw = (textureGather(textureUnitPS1, R0f.xy).xyzw); +R2f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw); +} +if( activeMaskStackC[1] == true ) { +activeMaskStack[1] = activeMaskStack[0]; +activeMaskStackC[2] = activeMaskStackC[1]; +// 0 +PV0f.x = R1f.z + R1f.w; +PV0f.y = R1f.y + -(R1f.w); +PV0f.z = R1f.x + -(R1f.z); +R127f.w = mul_nonIEEE(R2f.x, intBitsToFloat(uf_remappedPS[0].x)); +R126f.w = min(R1f.z, R1f.w); +PS0f = R126f.w; +// 1 +R126f.x = PV0f.z + PV0f.y; +PV1f.x = R126f.x; +PV1f.y = R1f.x + PV0f.x; +R127f.z = min(R1f.x, R1f.y); +R125f.w = PV0f.z + -(PV0f.y); +PV1f.w = R125f.w; +R127f.y = max(R1f.z, R1f.w); +PS1f = R127f.y; +// 2 +PV0f.x = R1f.y + PV1f.y; +PV0f.y = max(PV1f.w, -(PV1f.w)); +PV0f.z = max(PV1f.x, -(PV1f.x)); +PV0f.w = max(R1f.x, R1f.y); +R127f.x = (mul_nonIEEE(R2f.y,intBitsToFloat(uf_remappedPS[0].y)) + R127f.w); +PS0f = R127f.x; +// 3 +PV1f.x = min(PV0f.z, PV0f.y); +PV1f.y = min(R126f.w, R127f.z); +PV1f.z = max(R127f.y, PV0f.w); +R123f.w = (PV0f.x * intBitsToFloat(0x3d000000) + intBitsToFloat(0x3b800000)); +PV1f.w = R123f.w; +// 4 +PV0f.x = min(R127f.x, PV1f.y); +PV0f.y = max(R127f.x, PV1f.z); +PV0f.w = max(PV1f.w, PV1f.x); +// 5 +R0f.z = -(PV0f.x) + PV0f.y; +PS1f = 1.0 / PV0f.w; +// 6 +PV0f.x = R125f.w * PS1f; +PV0f.y = R126f.x * PS1f; +// 7 +PV1f.z = max(PV0f.x, intBitsToFloat(0xc0400000)); +PV1f.w = max(PV0f.y, intBitsToFloat(0xc0400000)); +// 8 +R1f.x = min(PV1f.w, intBitsToFloat(0x40400000)); +R1f.y = min(PV1f.z, intBitsToFloat(0x40400000)); +// 9 +predResult = (R0f.z > intBitsToFloat(uf_remappedPS[1].y)); +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[2].z)/ resScale)) + R0f.x); +R3f.y = (mul_nonIEEE(R1f.y,-(intBitsToFloat(uf_remappedPS[2].w)/ resScale)) + R0f.y); +R0f.z = (mul_nonIEEE(R1f.x,intBitsToFloat(uf_remappedPS[2].x)/ resScale) + R0f.x); +R0f.w = (mul_nonIEEE(R1f.y,intBitsToFloat(uf_remappedPS[2].y)/ resScale) + R0f.y); +R3f.z = (mul_nonIEEE(R1f.x,intBitsToFloat(uf_remappedPS[2].z)/ resScale) + R0f.x); +PS0f = R3f.z; +// 1 +R4f.x = (mul_nonIEEE(R1f.x,-(intBitsToFloat(uf_remappedPS[2].x)/ resScale)) + R0f.x); +R4f.y = (mul_nonIEEE(R1f.y,-(intBitsToFloat(uf_remappedPS[2].y)/ resScale)) + R0f.y); +R3f.w = (mul_nonIEEE(R1f.y,intBitsToFloat(uf_remappedPS[2].w)/ resScale) + 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(contrasty(R2f.xyz), R2f.w); +//passPixelColor0 = vec4(R2f.xyz, R2f.w); + +} diff --git a/Source/NewSuperMarioBrosU/70b82af4d17024d2_0000000000000000_vs.txt b/Source/NewSuperMarioBrosU/70b82af4d17024d2_0000000000000000_vs.txt new file mode 100644 index 00000000..23f6a1c7 --- /dev/null +++ b/Source/NewSuperMarioBrosU/70b82af4d17024d2_0000000000000000_vs.txt @@ -0,0 +1,83 @@ + + +#version 420 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_packing : enable +// shader 70b82af4d17024d2 +//AA fix +const float resScale = ; +uniform ivec4 uf_remappedVS[1]; +uniform vec2 uf_windowSpaceToClipSpaceTransform; +layout(location = 0) in uvec4 attrDataSem0; +layout(location = 1) in uvec4 attrDataSem1; +out gl_PerVertex +{ + vec4 gl_Position; + float gl_PointSize; +}; +layout(location = 0) out vec4 passParameterSem1; +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 R1f = vec4(0.0); +vec4 R2f = vec4(0.0); +vec4 R122f = vec4(0.0); +vec4 R123f = vec4(0.0); +uvec4 attrDecoder; +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; +vec3 cubeMapSTM; +int cubeMapFaceId; +attrDecoder.xyz = attrDataSem0.xyz; +attrDecoder.xyz = (attrDecoder.xyz>>24)|((attrDecoder.xyz>>8)&0xFF00)|((attrDecoder.xyz<<8)&0xFF0000)|((attrDecoder.xyz<<24)); +attrDecoder.w = 0; +R1f = vec4(intBitsToFloat(int(attrDecoder.x)), intBitsToFloat(int(attrDecoder.y)), intBitsToFloat(int(attrDecoder.z)), intBitsToFloat(floatBitsToInt(1.0))); +attrDecoder.xy = attrDataSem1.xy; +attrDecoder.xy = (attrDecoder.xy>>24)|((attrDecoder.xy>>8)&0xFF00)|((attrDecoder.xy<<8)&0xFF0000)|((attrDecoder.xy<<24)); +attrDecoder.z = 0; +attrDecoder.w = 0; +R2f = vec4(intBitsToFloat(int(attrDecoder.x)), intBitsToFloat(int(attrDecoder.y)), intBitsToFloat(floatBitsToInt(0.0)), intBitsToFloat(floatBitsToInt(1.0))); +// 0 +backupReg0f = R1f.x; +backupReg1f = R1f.y; +R1f.x = backupReg0f; +R1f.x *= 2.0; +R1f.y = backupReg1f; +R1f.y *= 2.0; +R1f.z = 0.0; +R1f.w = 1.0; +R122f.x = (-(intBitsToFloat(uf_remappedVS[0].x)/ resScale) * intBitsToFloat(0x3f266666) + R2f.x); +PS0f = R122f.x; +// 1 +R123f.x = (-(intBitsToFloat(uf_remappedVS[0].y)/ resScale) * intBitsToFloat(0x3f266666) + R2f.y); +PV1f.x = R123f.x; +R2f.z = PS0f; +// 2 +R2f.w = PV1f.x; +// export +gl_Position = vec4(R1f.x, R1f.y, R1f.z, R1f.w); +// export +passParameterSem1 = vec4(R2f.x, R2f.y, R2f.z, R2f.w); +// 0 +} diff --git a/Source/NewSuperMarioBrosU/ec4a85d51e778437_0000000000000000_vs.txt b/Source/NewSuperMarioBrosU/ec4a85d51e778437_0000000000000000_vs.txt new file mode 100644 index 00000000..1f13ff6b --- /dev/null +++ b/Source/NewSuperMarioBrosU/ec4a85d51e778437_0000000000000000_vs.txt @@ -0,0 +1,86 @@ + + +#version 420 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_packing : enable +// shader ec4a85d51e778437 +//box blur fix +const float resScale = ; +uniform ivec4 uf_remappedVS[1]; +uniform vec2 uf_windowSpaceToClipSpaceTransform; +layout(location = 0) in uvec4 attrDataSem0; +layout(location = 1) in uvec4 attrDataSem1; +out gl_PerVertex +{ + vec4 gl_Position; + float gl_PointSize; +}; +layout(location = 0) out vec4 passParameterSem3; +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); +uvec4 attrDecoder; +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; +vec3 cubeMapSTM; +int cubeMapFaceId; +R0f = floatBitsToInt(ivec4(gl_VertexID, 0, 0, gl_InstanceID)); +attrDecoder.xyz = attrDataSem0.xyz; +attrDecoder.xyz = (attrDecoder.xyz>>24)|((attrDecoder.xyz>>8)&0xFF00)|((attrDecoder.xyz<<8)&0xFF0000)|((attrDecoder.xyz<<24)); +attrDecoder.w = 0; +R1f = vec4(intBitsToFloat(int(attrDecoder.x)), intBitsToFloat(int(attrDecoder.y)), intBitsToFloat(int(attrDecoder.z)), intBitsToFloat(floatBitsToInt(1.0))); +attrDecoder.xy = attrDataSem1.xy; +attrDecoder.xy = (attrDecoder.xy>>24)|((attrDecoder.xy>>8)&0xFF00)|((attrDecoder.xy<<8)&0xFF0000)|((attrDecoder.xy<<24)); +attrDecoder.z = 0; +attrDecoder.w = 0; +R2f = vec4(intBitsToFloat(int(attrDecoder.x)), intBitsToFloat(int(attrDecoder.y)), intBitsToFloat(floatBitsToInt(0.0)), intBitsToFloat(floatBitsToInt(1.0))); +// 0 +backupReg0f = R1f.x; +backupReg1f = R1f.y; +R1f.x = backupReg0f; +R1f.x *= 2.0; +R1f.y = backupReg1f; +R1f.y *= 2.0; +R1f.z = intBitsToFloat(0xbf800000); +R1f.w = 1.0; +PS0f = R2f.x + -(intBitsToFloat(uf_remappedVS[0].x) / resScale); +// 1 +backupReg0f = R2f.y; +backupReg1f = R2f.x; +PV1f.x = R2f.y + -(intBitsToFloat(uf_remappedVS[0].y) / resScale); +R2f.y = backupReg0f + intBitsToFloat(uf_remappedVS[0].y)/resScale; +R2f.z = PS0f; +R2f.x = backupReg1f + intBitsToFloat(uf_remappedVS[0].x)/ resScale; +PS1f = R2f.x; +// 2 +R2f.w = PV1f.x; +// export +gl_Position = vec4(R1f.x, R1f.y, R1f.z, R1f.w); +// export +passParameterSem3 = vec4(R2f.x, R2f.y, R2f.z, R2f.w); +// 0 +} diff --git a/Source/NewSuperMarioBrosU/rules.txt b/Source/NewSuperMarioBrosU/rules.txt index 802c114f..f65379bd 100644 --- a/Source/NewSuperMarioBrosU/rules.txt +++ b/Source/NewSuperMarioBrosU/rules.txt @@ -1,44 +1,50 @@ - [Definition] titleIds = 0005000010101D00,0005000010101E00,000500001014B700,000500001014B800,0005000010101C00,0005000010142300,0005000010142400,0005000010142200 -name = "New Super Mario Bros. U - " +name = "New Super Mario Bros. U - 3840x2160" version = 2 -[TextureRedefine] # tv +#[TextureRedefine] #tilemap don't scale +#width = 2048 +#height = 512 + +[TextureRedefine] width = 1280 height = 720 -overwriteWidth = -overwriteHeight = +#formatsExcluded = 0x31,0x32,0x33,0x34,0x35,0x431,0x432,0x433,0x434,0x435,0x01a,0x234,0x235 +overwriteWidth = 3840 +overwriteHeight = 2160 -[TextureRedefine] # AA pass, shadows viewport -width = 640 -height = 360 -overwriteWidth = -overwriteHeight = - -[TextureRedefine] # -width = 320 -height = 180 -overwriteWidth = -overwriteHeight = - -##Textures -[TextureRedefine] # Dynamic shadows texture 3d overworld -width = 1024 -height = 1024 -formats = 0x005 #0x034 static shadow texture, don't scale -overwriteWidth = -overwriteHeight = +[TextureRedefine] #map shadows +width = 1024 +height = 1024 +formats = 0x005 +overwriteWidth = 3072 +overwriteHeight = 3072 -[TextureRedefine] # gamepad +[TextureRedefine] width = 854 height = 480 -#overwriteWidth = -#overwriteHeight = +#formatsExcluded = 0x31,0x32,0x33,0x34,0x35,0x431,0x432,0x433,0x434,0x435,0x01a,0x234,0x235 +overwriteWidth = 2562 +overwriteHeight = 1440 + +[TextureRedefine] +width = 640 +height = 360 +#formatsExcluded = 0x31,0x32,0x33,0x34,0x35,0x431,0x432,0x433,0x434,0x435,0x01a,0x234,0x235 +overwriteWidth = 1920 +overwriteHeight = 1080 + +[TextureRedefine] +width = 320 +height = 180 +#formatsExcluded = 0x31,0x32,0x33,0x34,0x35,0x431,0x432,0x433,0x434,0x435,0x01a,0x234,0x235 +overwriteWidth = 960 +overwriteHeight = 540 + +[TextureRedefine] +width = 160 +height = 90 +#formatsExcluded = 0x31,0x32,0x33,0x34,0x35,0x431,0x432,0x433,0x434,0x435,0x01a,0x234,0x235 +overwriteWidth = 480 +overwriteHeight = 270 \ No newline at end of file