1#version 460 core
2#extension GL_ARB_separate_shader_objects : enable
3#extension GL_ARB_shading_language_420pack : enable
4
5// includes
6
7#include "common/bloom_common.h"
8
9// sets
10
11#include "render/shaders/common/render_post_process_layout_common.h"
12
13layout(set = 1, binding = 0, rgba16f/*r11f_g11f_b10f*/) uniform writeonly image2D uWoTex;
14layout(set = 1, binding = 1) uniform texture2D uTex;
15layout(set = 1, binding = 2) uniform texture2D uTexBloom;
16layout(set = 1, binding = 3) uniform sampler uSampler;
17
18///////////////////////////////////////////////////////////////////////////////
19// bloom combine
20
21#define cTgs 8
22
23layout(local_size_x = cTgs, local_size_y = cTgs, local_size_z = 1) in;
24void main()
25{
26    const vec2 uv = (vec2(gl_GlobalInvocationID.xy) + 0.5) * uPc.viewportSizeInvSize.zw;
27    const vec3 baseColor = textureLod(sampler2D(uTex, uSampler), uv, 0).xyz;
28    // NOTE: more samples (lower resolution)
29    //const vec3 bloomColor = textureLod(sampler2D(uTexBloom, uSampler), uv, 0).xyz;
30    const vec3 bloomColor = bloomUpscale(uv, uPc.viewportSizeInvSize.zw, uTexBloom, uSampler);
31
32    vec3 finalColor = min(bloomCombine(baseColor, bloomColor, uPc.factor), CORE_BLOOM_CLAMP_MAX_VALUE);
33    //finalColor = bloomColor;
34    imageStore(uWoTex, ivec2(gl_GlobalInvocationID.xy), vec4(finalColor, 1.0));
35}
36