diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-05-20 22:09:28 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-05-21 00:51:52 +0300 |
commit | 6dc49ec9924b21af4e67f30150394138cb17754b (patch) | |
tree | 24658d842531c91de3c6360222608cd0364d9db2 /source/blender/draw/engines/eevee/eevee_shader.hh | |
parent | 0c71240f14e6016728a9942c079d357bc9eb4b41 (diff) |
GPU/EEVEE: Refactor codegen and nodetree support
This is the first step towards the new evaluation scheme of EEVEE
closures.
This commit contains:
- Removal of GPU_SOURCE_BUILTIN type, prefering global instead. This
avoid many boilerplate code since most of the old builtins are now
datas that are always present (i.e: view matrices, normals).
- Rewritting of codegen in C++ to use `std::stringstream`.
- Added a callback to let engine decide what to do with codegen code.
This remove a lot of needs for defines because of code order
dependency. The engine can insert the nodetree code in custom ways
to create advance effects (i.e: add displacement or vertex lighting).
Engine now returns final shader strings.
- Closure nodes evaluation replacment is a placeholder for now.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_shader.hh')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_shader.hh | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_shader.hh b/source/blender/draw/engines/eevee/eevee_shader.hh index d3e4284da1f..325d370d2c4 100644 --- a/source/blender/draw/engines/eevee/eevee_shader.hh +++ b/source/blender/draw/engines/eevee/eevee_shader.hh @@ -115,19 +115,29 @@ class ShaderModule { ~ShaderModule(); GPUShader *static_shader_get(eShaderType shader_type); - GPUMaterial *material_shader_get(Scene *scene, - ::Material *blender_mat, + GPUMaterial *material_shader_get(::Material *blender_mat, + struct bNodeTree *nodetree, eMaterialGeometry geometry_type, eMaterialDomain domain_type, bool deferred_compilation); + GPUShaderSource material_shader_code_generate(GPUMaterial *mat, const GPUCodegenOutput *codegen); + private: /* Run some custom preprocessor shader rewrite and returns a new string. */ std::string enum_preprocess(const char *input); - std::string material_shader_code_defs_get(eMaterialDomain domain_type); - char *material_shader_code_vert_get(eMaterialGeometry geometry_type); - char *material_shader_code_frag_get(eMaterialGeometry geometry_type, + char *material_shader_code_defs_get(eMaterialDomain domain_type); + char *material_shader_code_vert_get(const GPUCodegenOutput *codegen, + GPUMaterial *mat, + eMaterialGeometry geometry_type); + char *material_shader_code_geom_get(const GPUCodegenOutput *codegen, + GPUMaterial *mat, + eMaterialGeometry geometry_type, + eMaterialDomain domain_type); + char *material_shader_code_frag_get(const GPUCodegenOutput *codegen, + GPUMaterial *mat, + eMaterialGeometry geometry_type, eMaterialPipeline pipeline_type); }; |