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, rgba16f/*r11f_g11f_b10f*/) uniform writeonly image2D uWoTex; 14layout(set = 0, binding = 1) uniform texture2D uTex; 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/////////////////////////////////////////////////////////////////////////////// 25// bloom downscale 26 27#define cTgs 8 28 29layout(local_size_x = cTgs, local_size_y = cTgs, local_size_z = 1) in; 30void main() 31{ 32 // texSizeInvTexSize needs to be the output resolution 33 const vec2 uv = (vec2(gl_GlobalInvocationID.xy) + 0.5) * uPc.viewportSizeInvSize.zw; 34 35 vec3 color = vec3(0.0); 36 if (uPc.factor.x == CORE_BLOOM_TYPE_NORMAL) { 37 if ((CORE_BLOOM_QUALITY_NORMAL & CORE_POST_PROCESS_FLAGS) == CORE_BLOOM_QUALITY_NORMAL) { 38 color = BloomDownscale9(uv, uPc.viewportSizeInvSize.zw, uTex, uSampler); 39 } else { 40 color = BloomDownscale(uv, uPc.viewportSizeInvSize.zw, uTex, uSampler); 41 } 42 } else if (uPc.factor.x == CORE_BLOOM_TYPE_HORIZONTAL) { 43 color = BloomDownScaleHorizontal(uv, uPc.viewportSizeInvSize.zw, uTex, uSampler); 44 } else if (uPc.factor.x == CORE_BLOOM_TYPE_VERTICAL) { 45 color = BloomDownScaleVertical(uv, uPc.viewportSizeInvSize.zw, uTex, uSampler); 46 } 47 48 imageStore(uWoTex, ivec2(gl_GlobalInvocationID.xy), vec4(min(color, CORE_BLOOM_CLAMP_MAX_VALUE), 1.0)); 49} 50