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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2020-02-12 14:48:44 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2020-02-15 22:33:16 +0300
commit007f1b74a67302fb4c164eb26969419434a98aee (patch)
treef56ba0eecbbc11fc22e6a47aa0d76582e553e3da /source/blender/gpu/intern/gpu_codegen.h
parent6701db773e660e5306e305a1b10f8ea52955f06b (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.h163
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__ */