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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs