summaryrefslogtreecommitdiff
path: root/servers/rendering/rasterizer_rd/shaders/copy.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'servers/rendering/rasterizer_rd/shaders/copy.glsl')
-rw-r--r--servers/rendering/rasterizer_rd/shaders/copy.glsl220
1 files changed, 0 insertions, 220 deletions
diff --git a/servers/rendering/rasterizer_rd/shaders/copy.glsl b/servers/rendering/rasterizer_rd/shaders/copy.glsl
deleted file mode 100644
index 2d7661f65f..0000000000
--- a/servers/rendering/rasterizer_rd/shaders/copy.glsl
+++ /dev/null
@@ -1,220 +0,0 @@
-/* clang-format off */
-[compute]
-
-#version 450
-
-VERSION_DEFINES
-
-layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
-/* clang-format on */
-
-#define FLAG_HORIZONTAL (1 << 0)
-#define FLAG_USE_BLUR_SECTION (1 << 1)
-#define FLAG_USE_ORTHOGONAL_PROJECTION (1 << 2)
-#define FLAG_DOF_NEAR_FIRST_TAP (1 << 3)
-#define FLAG_GLOW_FIRST_PASS (1 << 4)
-#define FLAG_FLIP_Y (1 << 5)
-#define FLAG_FORCE_LUMINANCE (1 << 6)
-#define FLAG_COPY_ALL_SOURCE (1 << 7)
-
-layout(push_constant, binding = 1, std430) uniform Params {
- ivec4 section;
- ivec2 target;
- uint flags;
- uint pad;
- // Glow.
- float glow_strength;
- float glow_bloom;
- float glow_hdr_threshold;
- float glow_hdr_scale;
-
- float glow_exposure;
- float glow_white;
- float glow_luminance_cap;
- float glow_auto_exposure_grey;
- // DOF.
- float camera_z_far;
- float camera_z_near;
- uint pad2[2];
-}
-params;
-
-layout(set = 0, binding = 0) uniform sampler2D source_color;
-
-#ifdef GLOW_USE_AUTO_EXPOSURE
-layout(set = 1, binding = 0) uniform sampler2D source_auto_exposure;
-#endif
-
-#if defined(MODE_LINEARIZE_DEPTH_COPY) || defined(MODE_SIMPLE_COPY_DEPTH)
-layout(r32f, set = 3, binding = 0) uniform restrict writeonly image2D dest_buffer;
-#elif defined(DST_IMAGE_8BIT)
-layout(rgba8, set = 3, binding = 0) uniform restrict writeonly image2D dest_buffer;
-#else
-layout(rgba32f, set = 3, binding = 0) uniform restrict writeonly image2D dest_buffer;
-#endif
-
-void main() {
-
- // Pixel being shaded
- ivec2 pos = ivec2(gl_GlobalInvocationID.xy);
- if (any(greaterThan(pos, params.section.zw))) { //too large, do nothing
- return;
- }
-
-#ifdef MODE_MIPMAP
-
- ivec2 base_pos = (pos + params.section.xy) << 1;
- vec4 color = texelFetch(source_color, base_pos, 0);
- color += texelFetch(source_color, base_pos + ivec2(0, 1), 0);
- color += texelFetch(source_color, base_pos + ivec2(1, 0), 0);
- color += texelFetch(source_color, base_pos + ivec2(1, 1), 0);
- color /= 4.0;
-
- imageStore(dest_buffer, pos + params.target, color);
-#endif
-
-#ifdef MODE_GAUSSIAN_BLUR
-
- //Simpler blur uses SIGMA2 for the gaussian kernel for a stronger effect
-
- if (bool(params.flags & FLAG_HORIZONTAL)) {
-
- ivec2 base_pos = (pos + params.section.xy) << 1;
- vec4 color = texelFetch(source_color, base_pos + ivec2(0, 0), 0) * 0.214607;
- color += texelFetch(source_color, base_pos + ivec2(1, 0), 0) * 0.189879;
- color += texelFetch(source_color, base_pos + ivec2(2, 0), 0) * 0.131514;
- color += texelFetch(source_color, base_pos + ivec2(3, 0), 0) * 0.071303;
- color += texelFetch(source_color, base_pos + ivec2(-1, 0), 0) * 0.189879;
- color += texelFetch(source_color, base_pos + ivec2(-2, 0), 0) * 0.131514;
- color += texelFetch(source_color, base_pos + ivec2(-3, 0), 0) * 0.071303;
- imageStore(dest_buffer, pos + params.target, color);
- } else {
-
- ivec2 base_pos = (pos + params.section.xy);
- vec4 color = texelFetch(source_color, base_pos + ivec2(0, 0), 0) * 0.38774;
- color += texelFetch(source_color, base_pos + ivec2(0, 1), 0) * 0.24477;
- color += texelFetch(source_color, base_pos + ivec2(0, 2), 0) * 0.06136;
- color += texelFetch(source_color, base_pos + ivec2(0, -1), 0) * 0.24477;
- color += texelFetch(source_color, base_pos + ivec2(0, -2), 0) * 0.06136;
- imageStore(dest_buffer, pos + params.target, color);
- }
-#endif
-
-#ifdef MODE_GAUSSIAN_GLOW
-
- //Glow uses larger sigma 1 for a more rounded blur effect
-
-#define GLOW_ADD(m_ofs, m_mult) \
- { \
- ivec2 ofs = base_pos + m_ofs; \
- if (all(greaterThanEqual(ofs, section_begin)) && all(lessThan(ofs, section_end))) { \
- color += texelFetch(source_color, ofs, 0) * m_mult; \
- } \
- }
-
- vec4 color = vec4(0.0);
-
- if (bool(params.flags & FLAG_HORIZONTAL)) {
-
- ivec2 base_pos = (pos + params.section.xy) << 1;
- ivec2 section_begin = params.section.xy << 1;
- ivec2 section_end = section_begin + (params.section.zw << 1);
-
- GLOW_ADD(ivec2(0, 0), 0.174938);
- GLOW_ADD(ivec2(1, 0), 0.165569);
- GLOW_ADD(ivec2(2, 0), 0.140367);
- GLOW_ADD(ivec2(3, 0), 0.106595);
- GLOW_ADD(ivec2(-1, 0), 0.165569);
- GLOW_ADD(ivec2(-2, 0), 0.140367);
- GLOW_ADD(ivec2(-3, 0), 0.106595);
- color *= params.glow_strength;
- } else {
-
- ivec2 base_pos = pos + params.section.xy;
- ivec2 section_begin = params.section.xy;
- ivec2 section_end = section_begin + params.section.zw;
-
- GLOW_ADD(ivec2(0, 0), 0.288713);
- GLOW_ADD(ivec2(0, 1), 0.233062);
- GLOW_ADD(ivec2(0, 2), 0.122581);
- GLOW_ADD(ivec2(0, -1), 0.233062);
- GLOW_ADD(ivec2(0, -2), 0.122581);
- color *= params.glow_strength;
- }
-
-#undef GLOW_ADD
-
- if (bool(params.flags & FLAG_GLOW_FIRST_PASS)) {
-#ifdef GLOW_USE_AUTO_EXPOSURE
-
- color /= texelFetch(source_auto_exposure, ivec2(0, 0), 0).r / params.glow_auto_exposure_grey;
-#endif
- color *= params.glow_exposure;
-
- float luminance = max(color.r, max(color.g, color.b));
- float feedback = max(smoothstep(params.glow_hdr_threshold, params.glow_hdr_threshold + params.glow_hdr_scale, luminance), params.glow_bloom);
-
- color = min(color * feedback, vec4(params.glow_luminance_cap));
- }
-
- imageStore(dest_buffer, pos + params.target, color);
-
-#endif
-
-#ifdef MODE_SIMPLE_COPY
-
- vec4 color;
- if (bool(params.flags & FLAG_COPY_ALL_SOURCE)) {
- vec2 uv = vec2(pos) / vec2(params.section.zw);
- if (bool(params.flags & FLAG_FLIP_Y)) {
- uv.y = 1.0 - uv.y;
- }
- color = textureLod(source_color, uv, 0.0);
-
- if (bool(params.flags & FLAG_FORCE_LUMINANCE)) {
- color.rgb = vec3(max(max(color.r, color.g), color.b));
- }
- imageStore(dest_buffer, pos + params.target, color);
-
- } else {
- color = texelFetch(source_color, pos + params.section.xy, 0);
-
- if (bool(params.flags & FLAG_FORCE_LUMINANCE)) {
- color.rgb = vec3(max(max(color.r, color.g), color.b));
- }
-
- if (bool(params.flags & FLAG_FLIP_Y)) {
- pos.y = params.section.w - pos.y - 1;
- }
-
- imageStore(dest_buffer, pos + params.target, color);
- }
-
-#endif
-
-#ifdef MODE_SIMPLE_COPY_DEPTH
-
- vec4 color = texelFetch(source_color, pos + params.section.xy, 0);
-
- if (bool(params.flags & FLAG_FLIP_Y)) {
- pos.y = params.section.w - pos.y - 1;
- }
-
- imageStore(dest_buffer, pos + params.target, vec4(color.r));
-
-#endif
-
-#ifdef MODE_LINEARIZE_DEPTH_COPY
-
- float depth = texelFetch(source_color, pos + params.section.xy, 0).r;
- depth = depth * 2.0 - 1.0;
- depth = 2.0 * params.camera_z_near * params.camera_z_far / (params.camera_z_far + params.camera_z_near - depth * (params.camera_z_far - params.camera_z_near));
- vec4 color = vec4(depth / params.camera_z_far);
-
- if (bool(params.flags & FLAG_FLIP_Y)) {
- pos.y = params.section.w - pos.y - 1;
- }
-
- imageStore(dest_buffer, pos + params.target, color);
-#endif
-}