[BOTW] Add custom blur shaders (#86)

* Fix some pixelated blur in high res

* forgot to add rule

* double offset to get similar blur

more powah

* move into every res pack (excepth res<= 720)

credit to @JoelAlone for finding the what those values does.
ps: why github changes file hash...?
This commit is contained in:
NAVras-Z 2017-09-30 06:01:54 +08:00 committed by Joel
parent bcd04fc229
commit 2c3d552cbf
30 changed files with 800 additions and 816 deletions

View File

@ -0,0 +1,36 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,36 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,36 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,36 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,36 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,36 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0018518518518519 * 1);
R0f.y = (R0f.y + 0.0018518518518519 * 1);
R1f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.xw).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.xz).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0010416666666667 * 1);
R0f.y = (R0f.y + 0.0010416666666667 * 1);
R1f.xyzw = (texture(textureUnitPS0, R0f.yx).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.wx).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.zx).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0018518518518519 * 1);
R0f.y = (R0f.y + 0.0018518518518519 * 1);
R1f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.xw).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.xz).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0010416666666667 * 1.5);
R0f.y = (R0f.y + 0.0010416666666667 * 1.5);
R1f.xyzw = (texture(textureUnitPS0, R0f.yx).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.wx).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.zx).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0018518518518519 * 1.5);
R0f.y = (R0f.y + 0.0018518518518519 * 1.5);
R1f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.xw).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.xz).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0010416666666667 * 1.5);
R0f.y = (R0f.y + 0.0010416666666667 * 1.5);
R1f.xyzw = (texture(textureUnitPS0, R0f.yx).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.wx).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.zx).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -14,55 +14,25 @@ else if( v == 0xFFFFFFFF )
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);
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R3f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem3;
const float offset = 0.7;
R0f.z = (R0f.z + 0.00052083333333333 * offset); // horizontal move
R0f.y = (R0f.y - 0.00092592592592593 * offset); // vertical move
R0f.x = (R0f.x - 0.00052083333333333 * offset); // second horizontal move
R0f.w = (R0f.w + 0.00092592592592593 * offset); // second vertical move
R1f.xyz = (texture(textureUnitPS0, R0f.xy).xyz);
R2f.xyz = (texture(textureUnitPS0, R0f.zy).xyz);
R3f.xyz = (texture(textureUnitPS0, R0f.xw).xyz);
R0f.xyz = (texture(textureUnitPS0, R0f.zw).xyz);
// 0
PV0f.x = R1f.x + R2f.x;
PV0f.x /= 2.0;
PV0f.z = R1f.z + R2f.z;
PV0f.z /= 2.0;
PV0f.w = R1f.y + R2f.y;
PV0f.w /= 2.0;
R1f.w = 0.0;
PS0f = R1f.w;
// 1
R123f.x = (R3f.y * 0.5 + PV0f.w);
PV1f.x = R123f.x;
R123f.y = (R3f.x * 0.5 + PV0f.x);
PV1f.y = R123f.y;
R123f.w = (R3f.z * 0.5 + PV0f.z);
PV1f.w = R123f.w;
// 2
R1f.x = (R0f.x * 0.5 + PV1f.y)/2.0;
R1f.y = (R0f.y * 0.5 + PV1f.x)/2.0;
R1f.z = (R0f.z * 0.5 + PV1f.w)/2.0;
// export
passPixelColor0 = vec4(R1f.x, R1f.y, R1f.z, R1f.w);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0018518518518519 * 1.5);
R0f.y = (R0f.y + 0.0018518518518519 * 1.5);
R1f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.xw).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.xz).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0010416666666667 * 2.6);
R0f.y = (R0f.y + 0.0010416666666667 * 2.6);
R1f.xyzw = (texture(textureUnitPS0, R0f.yx).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.wx).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.zx).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0018518518518519 * 2.7);
R0f.y = (R0f.y + 0.0018518518518519 * 2.7);
R1f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.xw).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.xz).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0010416666666667 * 2.7);
R0f.y = (R0f.y + 0.0010416666666667 * 2.7);
R1f.xyzw = (texture(textureUnitPS0, R0f.yx).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.wx).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.zx).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0018518518518519 * 3);
R0f.y = (R0f.y + 0.0018518518518519 * 3);
R1f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.xw).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.xz).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0010416666666667 * 3);
R0f.y = (R0f.y + 0.0010416666666667 * 3);
R1f.xyzw = (texture(textureUnitPS0, R0f.yx).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.wx).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.zx).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -14,55 +14,25 @@ else if( v == 0xFFFFFFFF )
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);
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R3f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem3;
const float offset = 0.95;
R0f.z = (R0f.z + 0.00052083333333333 * offset); // horizontal move
R0f.y = (R0f.y - 0.00092592592592593 * offset); // vertical move
R0f.x = (R0f.x - 0.00052083333333333 * offset); // second horizontal move
R0f.w = (R0f.w + 0.00092592592592593 * offset); // second vertical move
R1f.xyz = (texture(textureUnitPS0, R0f.xy).xyz);
R2f.xyz = (texture(textureUnitPS0, R0f.zy).xyz);
R3f.xyz = (texture(textureUnitPS0, R0f.xw).xyz);
R0f.xyz = (texture(textureUnitPS0, R0f.zw).xyz);
// 0
PV0f.x = R1f.x + R2f.x;
PV0f.x /= 2.0;
PV0f.z = R1f.z + R2f.z;
PV0f.z /= 2.0;
PV0f.w = R1f.y + R2f.y;
PV0f.w /= 2.0;
R1f.w = 0.0;
PS0f = R1f.w;
// 1
R123f.x = (R3f.y * 0.5 + PV0f.w);
PV1f.x = R123f.x;
R123f.y = (R3f.x * 0.5 + PV0f.x);
PV1f.y = R123f.y;
R123f.w = (R3f.z * 0.5 + PV0f.z);
PV1f.w = R123f.w;
// 2
R1f.x = (R0f.x * 0.5 + PV1f.y)/2.0;
R1f.y = (R0f.y * 0.5 + PV1f.x)/2.0;
R1f.z = (R0f.z * 0.5 + PV1f.w)/2.0;
// export
passPixelColor0 = vec4(R1f.x, R1f.y, R1f.z, R1f.w);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 45d85f1d25e7d0de // vertical blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4601800 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0018518518518519 * 3);
R0f.y = (R0f.y + 0.0018518518518519 * 3);
R1f.xyzw = (texture(textureUnitPS0, R0f.xy).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.xw).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.xz).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(0.0, offset[i]) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(0.0, offset[i]) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -1,5 +1,8 @@
#version 420
#extension GL_ARB_texture_gather : enable
const float factor = 2.0; //higher is less blur
// shader 4dc5fdeced670c5e // horizontal blur
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf45c5000 res 320x180x1 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(location = 0) in vec4 passParameterSem0;
@ -14,57 +17,20 @@ else if( v == 0xFFFFFFFF )
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; }
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 ores = vec2( float(ires.x), float(ires.y) ) * uf_fragCoordScale;
vec2 scale = ores * factor;
void main()
{
vec4 R0f = vec4(0.0);
vec4 R1f = vec4(0.0);
vec4 R2f = vec4(0.0);
vec4 R123f = 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;
vec3 cubeMapSTM;
int cubeMapFaceId;
R0f = passParameterSem0;
R0f.z = (R0f.z - 0.0010416666666667 * 4);
R0f.y = (R0f.y + 0.0010416666666667 * 4);
R1f.xyzw = (texture(textureUnitPS0, R0f.yx).xyzw);
R2f.xyzw = (texture(textureUnitPS0, R0f.wx).xyzw);
R0f.xyzw = (texture(textureUnitPS0, R0f.zx).xyzw);
// 0
R123f.x = (R1f.w * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.x = R123f.x;
R123f.y = (R1f.z * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.y = R123f.y;
R123f.z = (R1f.y * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.z = R123f.z;
R123f.w = (R1f.x * intBitsToFloat(0x3eb4b4b5) + 0.0);
PV0f.w = R123f.w;
// 1
R123f.x = (R2f.w * intBitsToFloat(0x3e969697) + PV0f.x);
PV1f.x = R123f.x;
R123f.y = (R2f.z * intBitsToFloat(0x3e969697) + PV0f.y);
PV1f.y = R123f.y;
R123f.z = (R2f.y * intBitsToFloat(0x3e969697) + PV0f.z);
PV1f.z = R123f.z;
R123f.w = (R2f.x * intBitsToFloat(0x3e969697) + PV0f.w);
PV1f.w = R123f.w;
// 2
backupReg0f = R0f.x;
backupReg1f = R0f.y;
backupReg2f = R0f.z;
backupReg3f = R0f.w;
R0f.x = (backupReg0f * intBitsToFloat(0x3eb4b4b5) + PV1f.w);
R0f.y = (backupReg1f * intBitsToFloat(0x3eb4b4b5) + PV1f.z);
R0f.z = (backupReg2f * intBitsToFloat(0x3eb4b4b5) + PV1f.y);
R0f.w = (backupReg3f * intBitsToFloat(0x3eb4b4b5) + PV1f.x);
// export
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
vec2 R0f = vec2(passParameterSem0.w, passParameterSem0.x);
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
for (int i=1; i<4; i++) {
R1f += texture( textureUnitPS0, R0f+(vec2(offset[i], 0.0) / scale) ) * weight[i];
R1f += texture( textureUnitPS0, R0f-(vec2(offset[i], 0.0) / scale) ) * weight[i];
}
passPixelColor0 = R1f;
}

View File

@ -0,0 +1,38 @@
#version 420
#extension GL_ARB_texture_gather : enable
// shader cb0e6e8cbec4502a
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf5c7b800 res 1280x720x1 dim 1 tm: 4 format 0816 compSel: 0 1 2 5 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
layout(location = 0) in vec4 passParameterSem3;
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()
{
vec2 R0f = vec2((passParameterSem3.x + passParameterSem3.z)/2, (passParameterSem3.y+passParameterSem3.w)/2); //center point
ivec2 ires = textureSize(textureUnitPS0,0);
vec2 res = vec2( float(ires.x), float(ires.y) );
int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
vec4 R1f = vec4(0.0);
for (int i=0; i<r; i++) {
float m = (1-r)/2 + float(i);
for (int k=0; k<r; k++){
float n = (1-r)/2 + float(k);
R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
}
}
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
passPixelColor0 = R1f;
}