slang-shaders/fsr/shaders/fsr-pass0.slang
Jonatas Esteves b0b12b6a64 FSR: Improve quality of Film Grain and Anti-Aliasing
- New implementation of Film Grain that doesn't suck, so we can turn it up a nod by default. Supports RGB noise and shaping the distribution curve to control noise modulation. The previous implementation was just a placeholder, it was very basic.
- Greatly increased Anti-Aliasing quality in default preset.
- Include license headers to make clear that all my contributions are released on the public domain under the terms of the Unlicense. Anyone can do whatever they want with this.
2021-09-08 18:17:29 -03:00

62 lines
1.6 KiB
Plaintext

#version 450
// SPDX-License-Identifier: Unlicense
#pragma name FSR_EASU
// FSR - [EASU] EDGE ADAPTIVE SPATIAL UPSAMPLING
// filter_linear0 = true
// scale_type0 = viewport
// scale0 = 1.0
layout(push_constant) uniform Push {
vec4 SourceSize;
vec4 OriginalSize;
vec4 OutputSize;
uint FrameCount;
} params;
layout(std140, set = 0, binding = 0) uniform UBO {
mat4 MVP;
} global;
#pragma stage vertex
layout(location = 0) in vec4 Position;
layout(location = 1) in vec2 TexCoord;
layout(location = 0) out vec2 vTexCoord;
void main() {
gl_Position = global.MVP * Position;
vTexCoord = TexCoord;
}
#pragma stage fragment
layout(location = 0) in vec2 vTexCoord;
layout(location = 0) out vec4 FragColor;
layout(set = 0, binding = 2) uniform sampler2D Source;
#define A_GPU 1
#define A_GLSL 1
#include "ffx_a.h"
#define FSR_EASU_F 1
AU4 con0, con1, con2, con3;
AF4 FsrEasuRF(AF2 p) { return textureGather(Source, p, 0); }
AF4 FsrEasuGF(AF2 p) { return textureGather(Source, p, 1); }
AF4 FsrEasuBF(AF2 p) { return textureGather(Source, p, 2); }
#include "ffx_fsr1.h"
void main() {
FsrEasuCon(con0, con1, con2, con3,
params.SourceSize.x, params.SourceSize.y, // Viewport size (top left aligned) in the input image which is to be scaled.
params.SourceSize.x, params.SourceSize.y, // The size of the input image.
params.OutputSize.x, params.OutputSize.y); // The output resolution.
AU2 gxy = AU2(vTexCoord.xy * params.OutputSize.xy); // Integer pixel position in output.
AF3 Gamma2Color = AF3(0, 0, 0);
FsrEasuF(Gamma2Color, gxy, con0, con1, con2, con3);
FragColor = vec4(Gamma2Color, 1.0);
}