Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2021-05-20 22:09:28 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-05-21 00:51:52 +0300
commit6dc49ec9924b21af4e67f30150394138cb17754b (patch)
tree24658d842531c91de3c6360222608cd0364d9db2 /source/blender/draw/engines/eevee/eevee_shader.hh
parent0c71240f14e6016728a9942c079d357bc9eb4b41 (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.hh20
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);
};