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 "render/shaders/common/render_post_process_structs_common.h" 8 9#include "common/bloom_common.h" 10 11// sets 12 13layout(set = 0, binding = 0) uniform texture2D uTex; 14layout(set = 0, binding = 1) uniform texture2D uInputColor; 15layout(set = 0, binding = 2) uniform sampler uSampler; 16 17layout(push_constant, std430) uniform uPostProcessPushConstant 18{ 19 LocalPostProcessPushConstantStruct uPc; 20}; 21 22layout(constant_id = 0) const uint CORE_POST_PROCESS_FLAGS = 0; 23 24// in / out 25 26layout(location = 0) in vec2 inUv; 27 28layout(location = 0) out vec4 outColor; 29 30/////////////////////////////////////////////////////////////////////////////// 31// bloom upscale 32 33void main() 34{ 35 const vec2 uv = inUv; 36 vec3 color = vec3(0.0f); 37 if (uPc.factor.x == CORE_BLOOM_TYPE_NORMAL) { 38 color = BloomUpscale(uv, uPc.viewportSizeInvSize.zw, uTex, uSampler); 39 } else if (uPc.factor.x == CORE_BLOOM_TYPE_HORIZONTAL) { 40 color = BloomUpscaleHorizontal(uv, uPc.viewportSizeInvSize.zw, uTex, uSampler); 41 } else if (uPc.factor.x == CORE_BLOOM_TYPE_VERTICAL) { 42 color = BloomDownScaleVertical(uv, uPc.viewportSizeInvSize.zw, uTex, uSampler); 43 } 44 const vec3 baseColor = textureLod(sampler2D(uInputColor, uSampler), uv, 0).xyz; 45 const float scatter = uPc.factor.w; 46 color = min((baseColor + color * scatter), CORE_BLOOM_CLAMP_MAX_VALUE); 47 48 outColor = vec4(color, 1.0); 49} 50