[Bf-blender-cvs] [ae7833d9da3] viewport-compositor: Viewport Compositor: Port Math node

Omar Emara noreply at git.blender.org
Tue Dec 28 20:02:44 CET 2021


Commit: ae7833d9da374f32814e353227e2aec0a37e0668
Author: Omar Emara
Date:   Sat Nov 13 15:49:21 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rBae7833d9da374f32814e353227e2aec0a37e0668

Viewport Compositor: Port Math node

This patch ports the Math node to the viewport compositor. The shading
math shader was moved into a common directory to be used by both
materials and the compositor.

===================================================================

M	source/blender/gpu/CMakeLists.txt
M	source/blender/gpu/intern/gpu_material_library.c
R100	source/blender/gpu/shaders/material/gpu_shader_material_math.glsl	source/blender/gpu/shaders/common/gpu_shader_common_math.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
M	source/blender/nodes/composite/nodes/node_composite_math.cc

===================================================================

diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index c4348698587..ea187c104c9 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -279,6 +279,7 @@ data_to_c_simple(shaders/common/gpu_shader_common_color_ramp.glsl SRC)
 data_to_c_simple(shaders/common/gpu_shader_common_color_util.glsl SRC)
 data_to_c_simple(shaders/common/gpu_shader_common_curves.glsl SRC)
 data_to_c_simple(shaders/common/gpu_shader_common_math_util.glsl SRC)
+data_to_c_simple(shaders/common/gpu_shader_common_math.glsl SRC)
 data_to_c_simple(shaders/common/gpu_shader_common_mix_rgb.glsl SRC)
 data_to_c_simple(shaders/common/gpu_shader_common_hash.glsl SRC)
 
@@ -330,7 +331,6 @@ data_to_c_simple(shaders/material/gpu_shader_material_light_falloff.glsl SRC)
 data_to_c_simple(shaders/material/gpu_shader_material_light_path.glsl SRC)
 data_to_c_simple(shaders/material/gpu_shader_material_mapping.glsl SRC)
 data_to_c_simple(shaders/material/gpu_shader_material_map_range.glsl SRC)
-data_to_c_simple(shaders/material/gpu_shader_material_math.glsl SRC)
 data_to_c_simple(shaders/material/gpu_shader_material_mix_shader.glsl SRC)
 data_to_c_simple(shaders/material/gpu_shader_material_noise.glsl SRC)
 data_to_c_simple(shaders/material/gpu_shader_material_normal.glsl SRC)
diff --git a/source/blender/gpu/intern/gpu_material_library.c b/source/blender/gpu/intern/gpu_material_library.c
index bc7c23f4234..4f4c77831fd 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -45,6 +45,7 @@ extern char datatoc_gpu_shader_common_color_ramp_glsl[];
 extern char datatoc_gpu_shader_common_color_util_glsl[];
 extern char datatoc_gpu_shader_common_curves_glsl[];
 extern char datatoc_gpu_shader_common_math_util_glsl[];
+extern char datatoc_gpu_shader_common_math_glsl[];
 extern char datatoc_gpu_shader_common_mix_rgb_glsl[];
 extern char datatoc_gpu_shader_common_hash_glsl[];
 
@@ -96,7 +97,6 @@ extern char datatoc_gpu_shader_material_light_falloff_glsl[];
 extern char datatoc_gpu_shader_material_light_path_glsl[];
 extern char datatoc_gpu_shader_material_mapping_glsl[];
 extern char datatoc_gpu_shader_material_map_range_glsl[];
-extern char datatoc_gpu_shader_material_math_glsl[];
 extern char datatoc_gpu_shader_material_mix_shader_glsl[];
 extern char datatoc_gpu_shader_material_noise_glsl[];
 extern char datatoc_gpu_shader_material_normal_glsl[];
@@ -156,6 +156,11 @@ static GPUMaterialLibrary gpu_shader_common_color_util_library = {
     .dependencies = {NULL},
 };
 
+static GPUMaterialLibrary gpu_shader_common_math_library = {
+    .code = datatoc_gpu_shader_common_math_glsl,
+    .dependencies = {&gpu_shader_common_math_util_library, NULL},
+};
+
 static GPUMaterialLibrary gpu_shader_common_color_ramp_library = {
     .code = datatoc_gpu_shader_common_color_ramp_glsl,
     .dependencies = {NULL},
@@ -427,11 +432,6 @@ static GPUMaterialLibrary gpu_shader_material_map_range_library = {
     .dependencies = {&gpu_shader_common_math_util_library, NULL},
 };
 
-static GPUMaterialLibrary gpu_shader_material_math_library = {
-    .code = datatoc_gpu_shader_material_math_glsl,
-    .dependencies = {&gpu_shader_common_math_util_library, NULL},
-};
-
 static GPUMaterialLibrary gpu_shader_material_mix_shader_library = {
     .code = datatoc_gpu_shader_material_mix_shader_glsl,
     .dependencies = {NULL},
@@ -665,6 +665,7 @@ static GPUMaterialLibrary gpu_shader_material_world_normals_library = {
 static GPUMaterialLibrary *gpu_material_libraries[] = {
     &gpu_shader_common_color_ramp_library,
     &gpu_shader_common_math_util_library,
+    &gpu_shader_common_math_library,
     &gpu_shader_common_color_util_library,
     &gpu_shader_common_curves_library,
     &gpu_shader_common_mix_rgb_library,
@@ -705,7 +706,6 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
     &gpu_shader_material_light_path_library,
     &gpu_shader_material_mapping_library,
     &gpu_shader_material_map_range_library,
-    &gpu_shader_material_math_library,
     &gpu_shader_material_mix_shader_library,
     &gpu_shader_material_normal_library,
     &gpu_shader_material_normal_map_library,
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_math.glsl b/source/blender/gpu/shaders/common/gpu_shader_common_math.glsl
similarity index 100%
rename from source/blender/gpu/shaders/material/gpu_shader_material_math.glsl
rename to source/blender/gpu/shaders/common/gpu_shader_common_math.glsl
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
index f89608feff1..5a8572e956f 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
@@ -1,4 +1,4 @@
-void clamp_value(float value, float min, float max, out float result)
+void clamp_value(float value, const float min, const float max, out float result)
 {
   result = clamp(value, min, max);
 }
diff --git a/source/blender/nodes/composite/nodes/node_composite_math.cc b/source/blender/nodes/composite/nodes/node_composite_math.cc
index ecddcc2ad32..d63b131f8ae 100644
--- a/source/blender/nodes/composite/nodes/node_composite_math.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_math.cc
@@ -23,6 +23,8 @@
 
 #include "node_composite_util.hh"
 
+#include "NOD_math_functions.hh"
+
 /* **************** SCALAR MATH ******************** */
 static bNodeSocketTemplate cmp_node_math_in[] = {
     {SOCK_FLOAT, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
@@ -32,6 +34,45 @@ static bNodeSocketTemplate cmp_node_math_in[] = {
 
 static bNodeSocketTemplate cmp_node_math_out[] = {{SOCK_FLOAT, N_("Value")}, {-1, ""}};
 
+static const char *gpu_shader_get_name(int mode)
+{
+  const blender::nodes::FloatMathOperationInfo *info =
+      blender::nodes::get_float_math_operation_info(mode);
+  if (!info) {
+    return nullptr;
+  }
+  if (info->shader_name.is_empty()) {
+    return nullptr;
+  }
+  return info->shader_name.c_str();
+}
+
+static int node_composite_gpu_math(GPUMaterial *mat,
+                                   bNode *node,
+                                   bNodeExecData *UNUSED(execdata),
+                                   GPUNodeStack *in,
+                                   GPUNodeStack *out)
+{
+  const char *name = gpu_shader_get_name(node->custom1);
+  if (name == nullptr) {
+    return 0;
+  }
+
+  int valid = GPU_stack_link(mat, node, name, in, out);
+  if (!valid) {
+    return 0;
+  }
+
+  if (node->custom2 & SHD_MATH_CLAMP) {
+    const float min = 0.0f;
+    const float max = 1.0f;
+    return GPU_link(
+        mat, "clamp_value", out[0].link, GPU_constant(&min), GPU_constant(&max), &out[0].link);
+  }
+
+  return 1;
+}
+
 void register_node_type_cmp_math(void)
 {
   static bNodeType ntype;
@@ -40,6 +81,7 @@ void register_node_type_cmp_math(void)
   node_type_socket_templates(&ntype, cmp_node_math_in, cmp_node_math_out);
   node_type_label(&ntype, node_math_label);
   node_type_update(&ntype, node_math_update);
+  node_type_gpu(&ntype, node_composite_gpu_math);
 
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list