From e8a9de550f2ee4aceec4a7d426fa1e6a7fd64005 Mon Sep 17 00:00:00 2001 From: Omar Emara Date: Tue, 15 Oct 2024 14:21:45 +0300 Subject: [PATCH] Cleanup: Avoid writing to input arguments This patch adjusts the GLSL compositor code to avoid writing to inputting as variables. This is to make it easier to port the code to CPU. Also, write to the output directly instead of per channel. --- .../gpu_shader_compositor_color_balance.glsl | 18 ++++++++---------- .../gpu_shader_compositor_color_spill.glsl | 3 +-- .../gpu_shader_compositor_exposure.glsl | 3 +-- .../library/gpu_shader_compositor_gamma.glsl | 3 +-- .../gpu_shader_compositor_posterize.glsl | 3 +-- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_balance.glsl b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_balance.glsl index 1031f6ccfd7..601568cbf68 100644 --- a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_balance.glsl +++ b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_balance.glsl @@ -7,19 +7,18 @@ void node_composite_color_balance_lgg( float factor, vec4 color, vec3 lift, vec3 gamma, vec3 gain, out vec4 result) { - lift = 2.0 - lift; + vec3 inverse_lift = 2.0 - lift; vec3 srgb_color = linear_rgb_to_srgb(color.rgb); - vec3 lift_balanced = ((srgb_color - 1.0) * lift) + 1.0; + vec3 lift_balanced = ((srgb_color - 1.0) * inverse_lift) + 1.0; vec3 gain_balanced = lift_balanced * gain; gain_balanced = max(gain_balanced, vec3(0.0)); vec3 linear_color = srgb_to_linear_rgb(gain_balanced); - gamma = mix(gamma, vec3(1e-6), equal(gamma, vec3(0.0))); - vec3 gamma_balanced = pow(linear_color, 1.0 / gamma); + vec3 sanitized_gamma = mix(gamma, vec3(1e-6), equal(gamma, vec3(0.0))); + vec3 gamma_balanced = pow(linear_color, 1.0 / sanitized_gamma); - result.rgb = mix(color.rgb, gamma_balanced, min(factor, 1.0)); - result.a = color.a; + result = vec4(mix(color.rgb, gamma_balanced, min(factor, 1.0)), color.a); } void node_composite_color_balance_asc_cdl(float factor, @@ -30,11 +29,10 @@ void node_composite_color_balance_asc_cdl(float factor, float offset_basis, out vec4 result) { - offset += offset_basis; - vec3 balanced = color.rgb * slope + offset; + vec3 full_offset = offset + offset_basis; + vec3 balanced = color.rgb * slope + full_offset; balanced = pow(max(balanced, vec3(0.0)), power); - result.rgb = mix(color.rgb, balanced, min(factor, 1.0)); - result.a = color.a; + result = vec4(mix(color.rgb, balanced, min(factor, 1.0)), color.a); } void node_composite_color_balance_whitepoint(float factor, diff --git a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_spill.glsl b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_spill.glsl index 54476675a6a..2f488678419 100644 --- a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_spill.glsl +++ b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_color_spill.glsl @@ -12,6 +12,5 @@ void node_composite_color_spill(vec4 color, { float average_limit = (color[int(limit_channels.x)] + color[int(limit_channels.y)]) / 2.0; float map = factor * color[int(spill_channel)] - limit_scale * average_limit; - result.rgb = map > 0.0 ? color.rgb + spill_scale * map : color.rgb; - result.a = color.a; + result = vec4(map > 0.0 ? color.rgb + spill_scale * map : color.rgb, color.a); } diff --git a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_exposure.glsl b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_exposure.glsl index 6c47bd182d7..39129295589 100644 --- a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_exposure.glsl +++ b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_exposure.glsl @@ -5,6 +5,5 @@ void node_composite_exposure(vec4 color, float exposure, out vec4 result) { float multiplier = exp2(exposure); - result.rgb = color.rgb * multiplier; - result.a = color.a; + result = vec4(color.rgb * multiplier, color.a); } diff --git a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_gamma.glsl b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_gamma.glsl index da65e637e88..8723150c71b 100644 --- a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_gamma.glsl +++ b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_gamma.glsl @@ -6,6 +6,5 @@ void node_composite_gamma(vec4 color, float gamma, out vec4 result) { - result.rgb = fallback_pow(color.rgb, gamma, color.rgb); - result.a = color.a; + result = vec4(fallback_pow(color.rgb, gamma, color.rgb), color.a); } diff --git a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_posterize.glsl b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_posterize.glsl index ed05d72c8d8..ca776193f56 100644 --- a/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_posterize.glsl +++ b/source/blender/compositor/realtime_compositor/shaders/library/gpu_shader_compositor_posterize.glsl @@ -5,6 +5,5 @@ void node_composite_posterize(vec4 color, float steps, out vec4 result) { steps = clamp(steps, 2.0, 1024.0); - result = floor(color * steps) / steps; - result.a = color.a; + result = vec4(floor(color.rgb * steps) / steps, color.a); }