diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2020-02-12 14:48:44 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2020-02-15 22:33:16 +0300 |
commit | 007f1b74a67302fb4c164eb26969419434a98aee (patch) | |
tree | f56ba0eecbbc11fc22e6a47aa0d76582e553e3da /source/blender/gpu/intern/gpu_codegen.h | |
parent | 6701db773e660e5306e305a1b10f8ea52955f06b (diff) |
Cleanup: split off code from gpu_codegen.c into smaller files
Diffstat (limited to 'source/blender/gpu/intern/gpu_codegen.h')
-rw-r--r-- | source/blender/gpu/intern/gpu_codegen.h | 163 |
1 files changed, 11 insertions, 152 deletions
diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h index baa4debf862..ce20f495ba3 100644 --- a/source/blender/gpu/intern/gpu_codegen.h +++ b/source/blender/gpu/intern/gpu_codegen.h @@ -19,143 +19,21 @@ /** \file * \ingroup gpu + * + * Generate shader code from the intermediate node graph. */ #ifndef __GPU_CODEGEN_H__ #define __GPU_CODEGEN_H__ -#include "DNA_customdata_types.h" -#include "DNA_listBase.h" -#include "GPU_material.h" -#include "GPU_glew.h" - -struct GPUNode; +struct GPUMaterial; +struct GPUNodeGraph; struct GPUOutput; struct GPUShader; -struct GPUVertAttrLayers; struct GSet; struct ListBase; -/* Pass Generation - * - Takes a list of nodes and a desired output, and makes a pass. This - * will take ownership of the nodes and free them early if unused or - * at the end if used. - */ - -typedef enum eGPUDataSource { - GPU_SOURCE_OUTPUT, - GPU_SOURCE_CONSTANT, - GPU_SOURCE_UNIFORM, - GPU_SOURCE_ATTR, - GPU_SOURCE_BUILTIN, - GPU_SOURCE_STRUCT, - GPU_SOURCE_TEX, -} eGPUDataSource; - -typedef enum { - GPU_NODE_LINK_NONE = 0, - GPU_NODE_LINK_ATTR, - GPU_NODE_LINK_BUILTIN, - GPU_NODE_LINK_COLORBAND, - GPU_NODE_LINK_CONSTANT, - GPU_NODE_LINK_IMAGE_BLENDER, - GPU_NODE_LINK_IMAGE_TILEMAP, - GPU_NODE_LINK_OUTPUT, - GPU_NODE_LINK_UNIFORM, -} GPUNodeLinkType; - -struct GPUNode { - struct GPUNode *next, *prev; - - const char *name; - - /* Internal flag to mark nodes during pruning */ - bool tag; - - ListBase inputs; - ListBase outputs; -}; - -struct GPUNodeLink { - GPUNodeStack *socket; - - GPUNodeLinkType link_type; - int users; /* Refcount */ - - union { - /* GPU_NODE_LINK_CONSTANT | GPU_NODE_LINK_UNIFORM */ - float *data; - /* GPU_NODE_LINK_BUILTIN */ - eGPUBuiltin builtin; - /* GPU_NODE_LINK_COLORBAND */ - struct GPUTexture **coba; - /* GPU_NODE_LINK_OUTPUT */ - struct GPUOutput *output; - /* GPU_NODE_LINK_ATTR */ - struct { - const char *attr_name; - CustomDataType attr_type; - }; - /* GPU_NODE_LINK_IMAGE_BLENDER | GPU_NODE_LINK_IMAGE_TILEMAP */ - struct { - struct Image *ima; - struct ImageUser *iuser; - }; - }; -}; - -typedef struct GPUOutput { - struct GPUOutput *next, *prev; - - GPUNode *node; - eGPUType type; /* data type = length of vector/matrix */ - GPUNodeLink *link; /* output link */ - int id; /* unique id as created by code generator */ -} GPUOutput; - -typedef struct GPUInput { - struct GPUInput *next, *prev; - - GPUNode *node; - eGPUType type; /* datatype */ - GPUNodeLink *link; - int id; /* unique id as created by code generator */ - - eGPUDataSource source; /* data source */ - - int shaderloc; /* id from opengl */ - char shadername[32]; /* name in shader */ - - /* Content based on eGPUDataSource */ - union { - /* GPU_SOURCE_CONSTANT | GPU_SOURCE_UNIFORM */ - float vec[16]; /* vector data */ - /* GPU_SOURCE_BUILTIN */ - eGPUBuiltin builtin; /* builtin uniform */ - /* GPU_SOURCE_TEX */ - struct { - struct GPUTexture **coba; /* input texture, only set at runtime */ - struct Image *ima; /* image */ - struct ImageUser *iuser; /* image user */ - bool bindtex; /* input is responsible for binding the texture? */ - int texid; /* number for multitexture, starting from zero */ - eGPUType textype; /* texture type (2D, 1D Array ...) */ - }; - /* GPU_SOURCE_ATTR */ - struct { - /** Attribute name. */ - char attr_name[MAX_CUSTOMDATA_LAYER_NAME]; - /** ID for vertex attributes. */ - int attr_id; - /** This is the first one that is bound. */ - bool attr_first; - /** Attribute type. */ - CustomDataType attr_type; - }; - }; -} GPUInput; - -struct GPUPass { +typedef struct GPUPass { struct GPUPass *next; struct GPUShader *shader; @@ -171,42 +49,23 @@ struct GPUPass { int len; } binary; bool compiled; /* Did we already tried to compile the attached GPUShader. */ -}; +} GPUPass; -typedef struct GPUPass GPUPass; +/* Pass */ -GPUPass *GPU_generate_pass(GPUMaterial *material, - GPUNodeLink *frag_outlink, - struct GPUVertAttrLayers *attrs, - ListBase *nodes, - int *builtins, +GPUPass *GPU_generate_pass(struct GPUMaterial *material, + struct GPUNodeGraph *graph, const char *vert_code, const char *geom_code, const char *frag_lib, const char *defines); - struct GPUShader *GPU_pass_shader_get(GPUPass *pass); - -void GPU_nodes_extract_dynamic_inputs(struct GPUShader *shader, ListBase *inputs, ListBase *nodes); - bool GPU_pass_compile(GPUPass *pass, const char *shname); void GPU_pass_release(GPUPass *pass); -void GPU_pass_free_nodes(ListBase *nodes); -void GPU_inputs_free(ListBase *inputs); +/* Module */ void gpu_codegen_init(void); void gpu_codegen_exit(void); -/* Material calls */ - -const char *GPU_builtin_name(eGPUBuiltin builtin); -void gpu_material_add_node(struct GPUMaterial *material, struct GPUNode *node); -struct GPUTexture **gpu_material_ramp_texture_row_set(GPUMaterial *mat, - int size, - float *pixels, - float *row); - -struct GSet *gpu_material_used_libraries(struct GPUMaterial *material); - -#endif +#endif /* __GPU_CODEGEN_H__ */ |