mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-12-23 08:21:51 +01:00
[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:
parent
bcd04fc229
commit
2c3d552cbf
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -1,6 +1,9 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader 45d85f1d25e7d0de //vertical blur
|
||||
|
||||
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;
|
||||
@ -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;
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader 4dc5fdeced670c5e //horizontal blur
|
||||
|
||||
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;
|
||||
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -1,6 +1,9 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader 45d85f1d25e7d0de //vertical blur
|
||||
|
||||
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;
|
||||
@ -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;
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader 4dc5fdeced670c5e //horizontal blur
|
||||
|
||||
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;
|
||||
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -1,6 +1,9 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader 45d85f1d25e7d0de //vertical blur
|
||||
|
||||
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;
|
||||
@ -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;
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader 4dc5fdeced670c5e //horizontal blur
|
||||
|
||||
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;
|
||||
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user