1#version 460 core
2#extension GL_ARB_separate_shader_objects : enable
3#extension GL_ARB_shading_language_420pack : enable
4
5// specialization
6
7// includes
8#include "render/shaders/common/render_compatibility_common.h"
9#include "render/shaders/common/render_blur_common.h"
10
11// sets
12
13#include "render/shaders/common/render_post_process_layout_common.h"
14
15layout(set = 1, binding = 0) uniform sampler uSampler;
16layout(set = 1, binding = 1) uniform texture2D uTex;
17
18// in / out
19
20layout(location = 0) in vec2 inUv;
21
22layout(location = 0) out vec4 outColor;
23
24void main(void)
25{
26    if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_R) {
27        outColor.r =
28            GaussianBlurR(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).r;
29    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_RG) {
30        outColor.rg =
31            GaussianBlurRG(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).rg;
32    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_RGB) {
33        outColor.rgb =
34            GaussianBlurRGB(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).rgb;
35    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_A) {
36        outColor.r =
37            GaussianBlurA(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).r;
38    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_SOFT_DOWNSCALE_RGB) {
39        // dir not used
40        outColor.rgb =
41            SoftDownscaleRGB(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).rgb;
42    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_DOWNSCALE_RGBA) {
43        // dir not used
44        outColor.rgba =
45            DownscaleRGBA(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).rgba;
46    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_DOWNSCALE_RGBA_DOF) {
47        // dir not used
48        outColor.rgba =
49            DownscaleRGBADof(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).rgba;
50    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_RGBA) {
51        outColor.rgba =
52            GaussianBlurRGBA(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).rgba;
53    } else if (CORE_POST_PROCESS_FLAGS == CORE_BLUR_TYPE_RGBA_DOF) {
54        // dir not used
55        outColor.rgba =
56            DownscaleRGBADof(uTex, uSampler, gl_FragCoord.xy, inUv.xy, uPc.factor.xy, uPc.viewportSizeInvSize.zw).rgba;
57    }
58}
59