diff options
author | OmarSquircleArt <omar.squircleart@gmail.com> | 2019-08-30 18:23:04 +0300 |
---|---|---|
committer | OmarSquircleArt <omar.squircleart@gmail.com> | 2019-08-30 18:28:57 +0300 |
commit | 8cd0da88e55a0c0f88297a5f0f770eb40acc6219 (patch) | |
tree | 585b9bcc07ce392c6164ac0230d56d617ac051ca /source/blender/gpu/intern/gpu_codegen.c | |
parent | ac646bc20dafe176c1b84ee5beddf980aba11358 (diff) |
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
Diffstat (limited to 'source/blender/gpu/intern/gpu_codegen.c')
-rw-r--r-- | source/blender/gpu/intern/gpu_codegen.c | 27 |
1 files changed, 18 insertions, 9 deletions
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->code)) { BLI_dynstr_append(ds, library->code); } |