diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-08-23 15:36:22 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-08-26 20:18:34 +0300 |
commit | 7f840426fd4917f56e7bafcffffd51b93c1fc6f7 (patch) | |
tree | ef90d2c4836e1f521bfc847c92d4b692369a2295 /source/blender/gpu/intern/gpu_material_library.h | |
parent | 6b189d2bcf3536231f7040926ed34fe01012f14e (diff) |
GPU: add mechanism for splitting up big gpu_shader_material.glsl file
Compiling this big file for every Eevee material is bad for performance, and
now that we are adding more nodes it gets worse. This patch adds a simple
mechanism to split up that file, and use only the parts used by shader nodes.
When a function is used by GPU_link, we detect which GLSL file it came from
and use it in GLSL code generation automatically. Dependencies between GLSL
files are manually specified, and function names must be unique across all
GLSL files.
Most of the actual splitting up will be done in later commits.
Differential Revision: https://developer.blender.org/D5569
Diffstat (limited to 'source/blender/gpu/intern/gpu_material_library.h')
-rw-r--r-- | source/blender/gpu/intern/gpu_material_library.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/source/blender/gpu/intern/gpu_material_library.h b/source/blender/gpu/intern/gpu_material_library.h new file mode 100644 index 00000000000..7160a56a60e --- /dev/null +++ b/source/blender/gpu/intern/gpu_material_library.h @@ -0,0 +1,49 @@ +/* + * 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 + * + * List of all gpu_shader_material_*.glsl files used by GLSL materials. These + * will be parsed to make all functions in them available to use for GPU_link(). + * + * If a file uses functions from another file, it must be added to the list of + * dependencies, and be placed after that file in the list. */ + +#ifndef __GPU_MATERIAL_LIBRARY_H__ +#define __GPU_MATERIAL_LIBRARY_H__ + +typedef struct GPUMaterialLibrary { + char *code; + char *dependencies[8]; +} GPUMaterialLibrary; + +extern char datatoc_gpu_shader_material_glsl[]; +extern char datatoc_gpu_shader_material_hash_glsl[]; +extern char datatoc_gpu_shader_material_magic_glsl[]; +extern char datatoc_gpu_shader_material_white_noise_glsl[]; + +static GPUMaterialLibrary gpu_material_libraries[] = { + {datatoc_gpu_shader_material_hash_glsl, {NULL}}, + {datatoc_gpu_shader_material_glsl, {datatoc_gpu_shader_material_hash_glsl, NULL}}, + {datatoc_gpu_shader_material_magic_glsl, {NULL}}, + {datatoc_gpu_shader_material_white_noise_glsl, {datatoc_gpu_shader_material_hash_glsl, NULL}}, + {NULL, {NULL}}}; + +#endif |