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_node_graph.h
parent6701db773e660e5306e305a1b10f8ea52955f06b (diff)
Cleanup: split off code from gpu_codegen.c into smaller files
Diffstat (limited to 'source/blender/gpu/intern/gpu_node_graph.h')
-rw-r--r--source/blender/gpu/intern/gpu_node_graph.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/source/blender/gpu/intern/gpu_node_graph.h b/source/blender/gpu/intern/gpu_node_graph.h
new file mode 100644
index 00000000000..51e188e3f5e
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_node_graph.h
@@ -0,0 +1,182 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_NODE_GRAPH_H__
+#define __GPU_NODE_GRAPH_H__
+
+#include "DNA_customdata_types.h"
+#include "DNA_listBase.h"
+
+#include "GPU_material.h"
+#include "GPU_glew.h"
+#include "GPU_shader.h"
+
+struct GPUNode;
+struct GPUOutput;
+struct GPUShader;
+struct GPUVertAttrLayers;
+struct ListBase;
+
+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;
+
+typedef struct GPUNodeGraph {
+ /* Nodes */
+ ListBase nodes;
+
+ /* Inputs and output. */
+ ListBase inputs;
+ GPUNodeLink *outlink;
+
+ /* Needed attributes. */
+ GPUVertAttrLayers attrs;
+ int builtins;
+} GPUNodeGraph;
+
+/* Node Graph */
+
+void gpu_node_graph_prune_unused(GPUNodeGraph *graph);
+void gpu_node_graph_extract_dynamic_inputs(struct GPUShader *shader, GPUNodeGraph *graph);
+void gpu_node_graph_free(GPUNodeGraph *graph);
+
+/* Material calls */
+
+void gpu_material_add_node(struct GPUMaterial *material, struct GPUNode *node);
+struct GPUTexture **gpu_material_ramp_texture_row_set(struct GPUMaterial *mat,
+ int size,
+ float *pixels,
+ float *row);
+
+struct GSet *gpu_material_used_libraries(struct GPUMaterial *material);
+
+#endif /* __GPU_NODE_GRAPH_H__ */