LookingGlass/client/renderers/EGL/shader/ffx_fsr1_easu.frag
Geoffrey McRae 91b0cba145 [client] egl: switch from mediump to highp
This fixes a rounding issue on certain hardware (NVidia) which actually
implement mediump as half precision (16-bit) float. It's safe to assume
`highp` is available as if the GPU does not support it, then the shader
compiler will try to find a lower precision that is supported by the GPU
2023-03-05 14:10:21 +11:00

45 lines
1.1 KiB
GLSL

#version 300 es
precision highp float;
#include "compat.h"
in vec2 fragCoord;
out vec4 fragColor;
uniform sampler2D texture;
uniform vec2 uOutRes;
uniform uvec4 uConsts[4];
#define A_GPU 1
#define A_GLSL 1
#define A_FULL 1
#include "ffx_a.h"
#define FSR_EASU_F 1
vec4 _textureGather(sampler2D tex, vec2 uv, int comp)
{
vec2 res = vec2(textureSize(tex, 0));
ivec2 p = ivec2((uv * res) - 0.5f);
vec4 c0 = texelFetchOffset(tex, p, 0, ivec2(0,1));
vec4 c1 = texelFetchOffset(tex, p, 0, ivec2(1,1));
vec4 c2 = texelFetchOffset(tex, p, 0, ivec2(1,0));
vec4 c3 = texelFetchOffset(tex, p, 0, ivec2(0,0));
return vec4(c0[comp], c1[comp], c2[comp],c3[comp]);
}
AF4 FsrEasuRF(AF2 p){return AF4(_textureGather(texture, p, 0));}
AF4 FsrEasuGF(AF2 p){return AF4(_textureGather(texture, p, 1));}
AF4 FsrEasuBF(AF2 p){return AF4(_textureGather(texture, p, 2));}
#include "ffx_fsr1.h"
void main()
{
vec3 color;
uvec2 point = uvec2(fragCoord * uOutRes);
FsrEasuF(color, point, uConsts[0], uConsts[1], uConsts[2], uConsts[3]);
fragColor = vec4(color.rgb, 1);
}