cemu_graphic_packs/Quality/BreathOfTheWild_2160p/c92c1c4c0a2fb839_0000000000001e49_ps.txt
NAVras-Z 6c05eebe65 [BotW] blur shaders updates and fixes
update this first before adding splatoon
caution: gpu taxing at high res, if get framerate drop, try replacing them with ones from lower res, bloom will appear smaller and brighter (concentrated)
hope cemu will get more specific texture exclude so we don't have to upscale the blurs...
any advice on optimization is appreciated
2017-10-13 11:48:39 +08:00

151 lines
5.7 KiB
Plaintext

#version 420
#extension GL_ARB_texture_gather : enable
// shader c92c1c4c0a2fb839 // camera rune dof
uniform ivec4 uf_remappedPS[5];
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4e91800 res 1280x720x1 dim 1 tm: 4 format 0806 compSel: 0 4 4 5 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 0xf46ac800 res 640x360x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x5) sliceView: 0x0 (num 0x1) Sampler1 ClampX/Y/Z: 2 2 2 border: 1
layout(binding = 2) uniform sampler2D textureUnitPS2;// Tex2 addr 0xf4813000 res 640x360x1 dim 1 tm: 4 format 0001 compSel: 0 4 4 5 mipView: 0x0 (num 0x4) sliceView: 0x0 (num 0x1) Sampler2 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem2;
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()
{
ivec4 R0i = ivec4(0);
ivec4 R1i = ivec4(0);
ivec4 R2i = ivec4(0);
ivec4 R3i = ivec4(0);
ivec4 R4i = ivec4(0);
ivec4 R123i = ivec4(0);
ivec4 R127i = ivec4(0);
int backupReg0i, backupReg1i, backupReg2i, backupReg3i, backupReg4i;
ivec4 PV0i = ivec4(0), PV1i = ivec4(0);
int PS0i = 0, PS1i = 0;
ivec4 tempi = ivec4(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;
R0i = floatBitsToInt(passParameterSem2);
if( activeMaskStackC[1] == true ) {
R1i.w = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R0i.xy)).x);
R1i.z = floatBitsToInt(texture(textureUnitPS2, intBitsToFloat(R0i.xy)).x);
}
if( activeMaskStackC[1] == true ) {
// 0
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.w),intBitsToFloat(uf_remappedPS[0].x)) + intBitsToFloat(uf_remappedPS[1].x)));
R123i.x = clampFI32(R123i.x);
PV0i.x = R123i.x;
// 1
R0i.z = floatBitsToInt(max(intBitsToFloat(R1i.z), intBitsToFloat(PV0i.x)));
PV1i.z = R0i.z;
// 2
R1i.y = ((intBitsToFloat(PV1i.z) != 0.0)?int(0xFFFFFFFF):int(0x0));
PV0i.y = R1i.y;
// 3
if( (PV0i.y == 0)) discard;
}
if( activeMaskStackC[1] == true ) {
activeMaskStack[1] = activeMaskStack[0];
activeMaskStackC[2] = activeMaskStackC[1];
// 0
predResult = (R1i.y != 0);
activeMaskStack[1] = predResult;
activeMaskStackC[2] = predResult == true && activeMaskStackC[1] == true;
}
else {
activeMaskStack[1] = false;
activeMaskStackC[2] = false;
}
if( activeMaskStackC[2] == true ) {
// 0
PV0i.w = floatBitsToInt(intBitsToFloat(uf_remappedPS[2].y) + -(1.0));
// 1
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.w),intBitsToFloat(R0i.z)) + 1.0));
PV1i.z = R123i.z;
// 2
tempResultf = log2(intBitsToFloat(PV1i.z));
PS0i = floatBitsToInt(tempResultf);
// 3
R127i.x = floatBitsToInt(intBitsToFloat(PS0i) + -(1.0));
PV1i.x = R127i.x;
// 4
R2i.z = PV1i.x;
R1i.w = PV1i.x;
PS0i = floatBitsToInt(exp2(intBitsToFloat(PV1i.x)));
// 5
PV1i.z = floatBitsToInt(intBitsToFloat(PS0i) + intBitsToFloat(uf_remappedPS[3].w));
R3i.w = R127i.x;
R4i.w = R127i.x;
PS1i = R4i.w;
// 6
backupReg0i = R127i.x;
R127i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.z), intBitsToFloat(uf_remappedPS[4].y)));
PV0i.x = R127i.x;
PV0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.z), intBitsToFloat(uf_remappedPS[4].x)));
R127i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.z), intBitsToFloat(uf_remappedPS[4].w)));
R127i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.z), intBitsToFloat(uf_remappedPS[4].z)));
PV0i.w = R127i.w;
R2i.w = floatBitsToInt(intBitsToFloat(backupReg0i) + 1.0);
R2i.w = clampFI32(R2i.w);
PS0i = R2i.w;
// 7
R1i.x = floatBitsToInt(intBitsToFloat(R0i.x) + intBitsToFloat(PV0i.y));
R1i.y = floatBitsToInt(intBitsToFloat(R0i.y) + intBitsToFloat(PV0i.x));
R3i.z = floatBitsToInt(intBitsToFloat(R0i.x) + intBitsToFloat(PV0i.w));
R2i.x = floatBitsToInt(intBitsToFloat(R0i.x) + -(intBitsToFloat(PV0i.y)));
PS1i = R2i.x;
// 8
R3i.x = floatBitsToInt(intBitsToFloat(R0i.y) + intBitsToFloat(R127i.z));
R2i.y = floatBitsToInt(intBitsToFloat(R0i.y) + -(intBitsToFloat(R127i.x)));
R4i.z = floatBitsToInt(intBitsToFloat(R0i.x) + -(intBitsToFloat(R127i.w)));
R4i.y = floatBitsToInt(intBitsToFloat(R0i.y) + -(intBitsToFloat(R127i.z)));
PS0i = R4i.y;
}
if( activeMaskStackC[2] == true ) {
R1i.xyz = floatBitsToInt(textureLod(textureUnitPS1, intBitsToFloat(R1i.xy),intBitsToFloat(R1i.w)).xyz);
R2i.xyz = floatBitsToInt(textureLod(textureUnitPS1, intBitsToFloat(R2i.xy),intBitsToFloat(R2i.z)).xyz);
R3i.xyz = floatBitsToInt(textureLod(textureUnitPS1, intBitsToFloat(R3i.zx),intBitsToFloat(R3i.w)).xyz);
R4i.xyz = floatBitsToInt(textureLod(textureUnitPS1, intBitsToFloat(R4i.zy),intBitsToFloat(R4i.w)).xyz);
}
if( activeMaskStackC[2] == true ) {
vec2 R9f = vec2( passParameterSem2.x, passParameterSem2.y ); //center point
vec2 res = vec2( R2i.x - R1i.x, R3i.x - R4i.y ) * uf_fragCoordScale;
int r = int(floor(1.0 / uf_fragCoordScale.y + 0.5));
vec3 R10f = vec3(0.0);
float count = 0.0;
for( int x=-r; x<=r; x++ ) {
for( int y=-r; y<=r; y++ ) {
if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
R10f += textureLod( textureUnitPS1, R9f + vec2(x,y)*res, intBitsToFloat(R1i.w) ).xyz;
count += 1.0;
}
}
}
R2i.xyz = floatBitsToInt(R10f/count);
}
activeMaskStackC[1] = activeMaskStack[0] == true && activeMaskStackC[0] == true;
// export
passPixelColor0 = vec4(intBitsToFloat(R2i.x), intBitsToFloat(R2i.y), intBitsToFloat(R2i.z), intBitsToFloat(R2i.w));
}