[Bf-blender-cvs] [8cd0da88e55] master: GPU: Split gpu_shader_material into multiple files.

OmarSquircleArt noreply at git.blender.org
Fri Aug 30 17:27:49 CEST 2019


Commit: 8cd0da88e55a0c0f88297a5f0f770eb40acc6219
Author: OmarSquircleArt
Date:   Fri Aug 30 17:23:04 2019 +0200
Branches: master
https://developer.blender.org/rB8cd0da88e55a0c0f88297a5f0f770eb40acc6219

GPU: Split gpu_shader_material into multiple files.

This patch continue the efforts to split the `gpu_shader_material` file
started in D5569.

Dependency resolution is now recursive. Each shading node gets its own
file. Additionally, some utility files are added to be shared between
files, like `math_util`, `color_util`, and `hash`. Some files are always
included because they may be used in the execution function, like
`world_normals`.

Some glsl functions appeared to be unused, so they were removed, like
`output_node`, `bits_to_01`, and `exp_blender`. Other functions have
been renamed to be more general and get used as utils, like `texco_norm`
which became `vector_normalize`.

A lot of the opengl tests fails, but those same tests also fail in
master, so this is probably unrelated to this patch.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D5616

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

M	source/blender/gpu/CMakeLists.txt
M	source/blender/gpu/intern/gpu_codegen.c
M	source/blender/gpu/intern/gpu_material_library.h
D	source/blender/gpu/shaders/gpu_shader_material.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_add_shader.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_anisotropic.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_attribute.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_background.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_bevel.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_blackbody.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_bright_contrast.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_camera.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_cell_noise.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_color_util.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_combine_hsv.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_combine_rgb.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_combine_xyz.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_diffuse.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_displacement.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_emission.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_fractal_noise.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_fresnel.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_gamma.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_geometry.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_hair_info.glsl
R094	source/blender/gpu/shaders/gpu_shader_material_hash.glsl	source/blender/gpu/shaders/material/gpu_shader_material_hash.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_holdout.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_hue_sat_val.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_invert.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_layer_weight.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_light_falloff.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_light_path.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_map_range.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_mapping.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_math.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_math_util.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_mix_rgb.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_mix_shader.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_noise.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_normal.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_normal_map.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_object_info.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_output_material.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_output_world.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_particle_info.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_rgb_curves.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_rgb_to_bw.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_separate_hsv.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_separate_rgb.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_separate_xyz.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_set.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_shader_to_rgba.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_squeeze.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tangent.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_brick.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_checker.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_environment.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_gradient.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_image.glsl
R100	source/blender/gpu/shaders/gpu_shader_material_magic.glsl	source/blender/gpu/shaders/material/gpu_shader_material_tex_magic.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_musgrave.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_noise.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_sky.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_voronoi.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_tex_wave.glsl
R100	source/blender/gpu/shaders/gpu_shader_material_white_noise.glsl	source/blender/gpu/shaders/material/gpu_shader_material_tex_white_noise.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_toon.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_translucent.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_transparent.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_uv_map.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_vector_curves.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_vector_displacement.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_vector_math.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_velvet.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_volume_absorption.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_volume_info.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_volume_principled.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_volume_scatter.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_wireframe.glsl
A	source/blender/gpu/shaders/material/gpu_shader_material_world_normals.glsl
M	source/blender/nodes/shader/node_shader_util.c
M	source/blender/nodes/shader/nodes/node_shader_mapping.c
M	source/blender/nodes/shader/nodes/node_shader_mixRgb.c
M	source/blender/nodes/shader/nodes/node_shader_normal_map.c
M	source/blender/nodes/shader/nodes/node_shader_tex_environment.c
M	source/blender/nodes/shader/nodes/node_shader_tex_image.c
M	source/blender/nodes/shader/nodes/node_shader_vectTransform.c

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

diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 4a67f5f6af8..f11dcc9bcf0 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -232,10 +232,94 @@ data_to_c_simple(shaders/gpu_shader_keyframe_diamond_vert.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_keyframe_diamond_frag.glsl SRC)
 
 data_to_c_simple(shaders/gpu_shader_geometry.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_material.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_material_hash.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_material_magic.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_material_white_noise.glsl SRC)
+
+data_to_c_simple(shaders/material/gpu_shader_material_add_shader.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_ambient_occlusion.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_anisotropic.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_attribute.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_background.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_bevel.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_blackbody.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_bright_contrast.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_bump.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_camera.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_cell_noise.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_clamp.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_color_ramp.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_color_util.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_combine_hsv.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_combine_rgb.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_combine_xyz.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_diffuse.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_displacement.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_eevee_specular.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_emission.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_fractal_noise.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_fresnel.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_gamma.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_geometry.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_glass.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_glossy.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_hair_info.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_hash.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_holdout.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_hue_sat_val.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_invert.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_layer_weight.glsl SRC)
+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_math_util.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_mix_rgb.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)
+data_to_c_simple(shaders/material/gpu_shader_material_normal_map.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_object_info.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_output_material.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_output_world.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_particle_info.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_principled.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_refraction.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_rgb_curves.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_rgb_to_bw.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_separate_hsv.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_separate_rgb.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_separate_xyz.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_set.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_shader_to_rgba.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_squeeze.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_subsurface_scattering.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tangent.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_brick.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_checker.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_environment.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_gradient.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_image.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_magic.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_musgrave.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_noise.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_sky.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_texture_coordinates.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_voronoi.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_wave.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_tex_white_noise.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_toon.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_translucent.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_transparent.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_uv_map.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_vector_curves.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_vector_displacement.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_vector_math.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_velvet.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_volume_absorption.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_volume_info.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_volume_principled.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_volume_scatter.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_wireframe.glsl SRC)
+data_to_c_simple(shaders/material/gpu_shader_material_world_normals.glsl SRC)
 
 data_to_c_simple(shaders/gpu_shader_gpencil_stroke_vert.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_gpencil_stroke_frag.glsl SRC)
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index 8199f0ca194..d655a43561e 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -414,7 +414,7 @@ static void codegen_convert_datatype(DynStr *ds, int from, int to, const char *t
   }
   else if (to == GPU_FLOAT) {
     if (from == GPU_VEC4) {
-      BLI_dynstr_appendf(ds, "convert_rgba_to_float(%s)", name);
+      BLI_dynstr_appendf(ds, "dot(%s.rgb, vec3(0.2126, 0.7152, 0.0722))", name);
     }
     else if (from == GPU_VEC3) {
       BLI_dynstr_appendf(ds, "(%s.r + %s.g + %s.b) / 3.0", name, name, name);
@@ -1376,8 +1376,8 @@ void GPU_code_generate_glsl_lib(void)
   }
 
   FUNCTION_HASH = BLI_ghash_str_new("GPU_lookup_function gh");
-  for (int i = 0; gpu_material_libraries[i].code; i++) {
-    gpu_parse_material_library(FUNCTION_HASH, &gpu_material_libraries[i]);
+  for (int i = 0; gpu_material_libraries[i]; i++) {
+    gpu_parse_material_library(FUNCTION_HASH, gpu_material_libraries[i]);
   }
 }
 
@@ -1780,17 +1780,22 @@ GPUNodeLink *GPU_builtin(eGPUBuiltin builtin)
   return link;
 }
 
-static void gpu_material_use_library(GPUMaterial *material, GPUMaterialLibrary *library)
+static void gpu_material_use_library_with_dependencies(GSet *used_libraries,
+                                                       GPUMaterialLibrary *library)
 {
-  GSet *used_libraries = gpu_material_used_libraries(material);
-
   if (BLI_gset_add(used_libraries, library->code)) {
     for (int i = 0; library->dependencies[i]; i++) {
-      BLI_gset_add(used_libraries, library->dependencies[i]);
+      gpu_material_use_library_with_dependencies(used_libraries, library->dependencies[i]);
     }
   }
 }
 
+static void gpu_material_use_library(GPUMaterial *material, GPUMaterialLibrary *library)
+{
+  GSet *used_libraries = gpu_material_used_libraries(material);
+  gpu_material_use_library_with_dependencies(used_libraries, library);
+}
+
 bool GPU_link(GPUMaterial *mat, const char *name, ...)
 {
   GPUNode *node;
@@ -1971,9 +1976,13 @@ static char *code_generate_material_library(GPUMaterial *material, const char *f
 
   GSet *used_libraries = gpu_material_used_libraries(material);
 
+  /* Always include those because they may be needed by the execution function. */
+  gpu_material_use_library_with_dependencies(used_libraries,
+                                             &gpu_shader_material_world_normals_library);
+
   /* Add library code in order, for dependencies. */
-  for (int i = 0; gpu_material_libraries[i].code; i++) {
-    GPUMaterialLibrary *library = &gpu_material_libraries[i];
+  for (int i = 0; gpu_material_libraries[i]; i++) {
+    GPUMaterialLibrary *library = gpu_material_libraries[i];
     if (BLI_gset_haskey(used_libraries, library->

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list