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:
authorCampbell Barton <ideasman42@gmail.com>2019-01-26 02:04:10 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-26 02:33:14 +0300
commit13933352274c9a3493d0b2c9e607d2c2c9d75ff9 (patch)
treec28715197ca95896b4eada80f805d6d1b9cad992 /source/blender/gpu/intern
parent0e95abf74b1955da38f4f61d7102c0d69663a56c (diff)
GPU: refactor defines into GPUShaderStages
Code comment notes there are "just a few", now there are enough it's useful to include in GPUShaderStages.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r--source/blender/gpu/intern/gpu_shader.c125
1 files changed, 51 insertions, 74 deletions
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index 45c0996bcd2..4cbdefc09a9 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -190,6 +190,8 @@ typedef struct {
/** Optional. */
const char *geom;
const char *frag;
+ /** Optional. */
+ const char *defs;
} GPUShaderStages;
static void shader_print_errors(const char *task, const char *log, const char **code, int totcode)
@@ -719,6 +721,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR] = {
.vert = datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl,
.frag = datatoc_gpu_shader_simple_lighting_smooth_color_frag_glsl,
+ .defs =
+ "#define USE_FLAT_NORMAL\n",
},
[GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR] = {
.vert = datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl,
@@ -748,34 +752,54 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_2] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 2\n",
},
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_4] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 4\n",
},
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_8] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 8\n",
},
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_16] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 16\n",
},
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_2_DEPTH_TEST] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 2\n"
+ "#define USE_DEPTH\n",
},
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_4_DEPTH_TEST] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 4\n"
+ "#define USE_DEPTH\n",
},
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_8_DEPTH_TEST] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 8\n"
+ "#define USE_DEPTH\n",
},
[GPU_SHADER_2D_IMAGE_MULTISAMPLE_16_DEPTH_TEST] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_image_multisample_resolve_frag_glsl,
+ .defs =
+ "#define SAMPLES 16\n"
+ "#define USE_DEPTH\n",
},
[GPU_SHADER_2D_IMAGE_INTERLACE] = {
@@ -848,6 +872,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_3D_UNIFORM_COLOR_BACKGROUND] = {
.vert = datatoc_gpu_shader_3D_vert_glsl,
.frag = datatoc_gpu_shader_uniform_color_frag_glsl,
+ .defs =
+ "#define USE_BACKGROUND\n",
},
[GPU_SHADER_3D_FLAT_COLOR] = {
.vert = datatoc_gpu_shader_3D_flat_color_vert_glsl,
@@ -890,6 +916,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR] = {
.vert = datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl,
.frag = datatoc_gpu_shader_simple_lighting_frag_glsl,
+ .defs =
+ "#define USE_INSTANCE_COLOR\n",
},
[GPU_SHADER_3D_OBJECTSPACE_VARIYING_COLOR] = {
.vert = datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl,
@@ -902,6 +930,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS] = {
.vert = datatoc_gpu_shader_instance_screen_aligned_vert_glsl,
.frag = datatoc_gpu_shader_flat_color_frag_glsl,
+ .defs =
+ "#define AXIS_NAME\n",
},
[GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED] = {
.vert = datatoc_gpu_shader_instance_screen_aligned_vert_glsl,
@@ -969,10 +999,14 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_INSTANCE_VARIYING_ID_VARIYING_SIZE] = {
.vert = datatoc_gpu_shader_instance_variying_size_variying_id_vert_glsl,
.frag = datatoc_gpu_shader_flat_id_frag_glsl,
+ .defs =
+ "#define UNIFORM_SCALE\n",
},
[GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE] = {
.vert = datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl,
.frag = datatoc_gpu_shader_flat_color_frag_glsl,
+ .defs =
+ "#define UNIFORM_SCALE\n",
},
[GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SCALE] = {
.vert = datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl,
@@ -995,6 +1029,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_2D_WIDGET_BASE_INST] = {
.vert = datatoc_gpu_shader_2D_widget_base_vert_glsl,
.frag = datatoc_gpu_shader_2D_widget_base_frag_glsl,
+ .defs =
+ "#define USE_INSTANCE\n",
},
[GPU_SHADER_2D_WIDGET_SHADOW] = {
.vert = datatoc_gpu_shader_2D_widget_shadow_vert_glsl,
@@ -1007,11 +1043,15 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_2D_NODELINK_INST] = {
.vert = datatoc_gpu_shader_2D_nodelink_vert_glsl,
.frag = datatoc_gpu_shader_2D_nodelink_frag_glsl,
+ .defs =
+ "#define USE_INSTANCE\n",
},
[GPU_SHADER_2D_UV_UNIFORM_COLOR] = {
.vert = datatoc_gpu_shader_2D_vert_glsl,
.frag = datatoc_gpu_shader_uniform_color_frag_glsl,
+ .defs =
+ "#define UV_POS\n",
},
[GPU_SHADER_2D_UV_VERTS] = {
.vert = datatoc_gpu_shader_2D_edituvs_points_vert_glsl,
@@ -1028,6 +1068,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_2D_UV_EDGES_SMOOTH] = {
.vert = datatoc_gpu_shader_2D_edituvs_edges_vert_glsl,
.frag = datatoc_gpu_shader_2D_smooth_color_frag_glsl,
+ .defs =
+ "#define SMOOTH_COLOR\n",
},
[GPU_SHADER_2D_UV_FACES] = {
.vert = datatoc_gpu_shader_2D_edituvs_faces_vert_glsl,
@@ -1040,6 +1082,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_2D_UV_FACES_STRETCH_ANGLE] = {
.vert = datatoc_gpu_shader_2D_edituvs_stretch_vert_glsl,
.frag = datatoc_gpu_shader_2D_smooth_color_frag_glsl,
+ .defs =
+ "#define STRETCH_ANGLE\n",
},
[GPU_SHADER_3D_FLAT_SELECT_ID] = {
@@ -1049,6 +1093,8 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
[GPU_SHADER_3D_UNIFORM_SELECT_ID] = {
.vert = datatoc_gpu_shader_3D_selection_id_vert_glsl,
.frag = datatoc_gpu_shader_selection_id_frag_glsl,
+ .defs =
+ "#define UNIFORM_ID\n",
},
[GPU_SHADER_GPENCIL_STROKE] = {
@@ -1063,82 +1109,12 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
},
};
-/* just a few special cases */
-static const char *gpu_shader_get_builtin_shader_defines(
- eGPUBuiltinShader shader)
-{
- switch (shader) {
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_2:
- return "#define SAMPLES 2\n";
-
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_2_DEPTH_TEST:
- return "#define SAMPLES 2\n"
- "#define USE_DEPTH\n";
-
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_4:
- return "#define SAMPLES 4\n";
-
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_4_DEPTH_TEST:
- return "#define SAMPLES 4\n"
- "#define USE_DEPTH\n";
-
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_8:
- return "#define SAMPLES 8\n";
-
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_8_DEPTH_TEST:
- return "#define SAMPLES 8\n"
- "#define USE_DEPTH\n";
-
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_16:
- return "#define SAMPLES 16\n";
-
- case GPU_SHADER_2D_IMAGE_MULTISAMPLE_16_DEPTH_TEST:
- return "#define SAMPLES 16\n"
- "#define USE_DEPTH\n";
-
- case GPU_SHADER_2D_WIDGET_BASE_INST:
- case GPU_SHADER_2D_NODELINK_INST:
- return "#define USE_INSTANCE\n";
-
- case GPU_SHADER_INSTANCE_VARIYING_ID_VARIYING_SIZE:
- case GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE:
- return "#define UNIFORM_SCALE\n";
-
- case GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS:
- return "#define AXIS_NAME\n";
-
- case GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR:
- return "#define USE_INSTANCE_COLOR\n";
-
- case GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR:
- return "#define USE_FLAT_NORMAL\n";
-
- case GPU_SHADER_2D_UV_UNIFORM_COLOR:
- return "#define UV_POS\n";
-
- case GPU_SHADER_2D_UV_EDGES_SMOOTH:
- return "#define SMOOTH_COLOR\n";
-
- case GPU_SHADER_3D_UNIFORM_SELECT_ID:
- return "#define UNIFORM_ID\n";
-
- case GPU_SHADER_2D_UV_FACES_STRETCH_ANGLE:
- return "#define STRETCH_ANGLE\n";
- case GPU_SHADER_3D_UNIFORM_COLOR_BACKGROUND:
- return "#define USE_BACKGROUND\n";
- default:
- return NULL;
- }
-}
-
GPUShader *GPU_shader_get_builtin_shader(eGPUBuiltinShader shader)
{
BLI_assert(shader != GPU_NUM_BUILTIN_SHADERS); /* don't be a troll */
if (builtin_shaders[shader] == NULL) {
- const char *defines = gpu_shader_get_builtin_shader_defines(shader);
-
- const GPUShaderStages *stages = builtin_shader_stages + shader;
+ const GPUShaderStages *stages = &builtin_shader_stages[shader];
if (shader == GPU_SHADER_EDGES_FRONT_BACK_PERSP && !GLEW_VERSION_3_2) {
/* TODO: remove after switch to core profile (maybe) */
@@ -1160,7 +1136,8 @@ GPUShader *GPU_shader_get_builtin_shader(eGPUBuiltinShader shader)
}
/* common case */
- builtin_shaders[shader] = GPU_shader_create(stages->vert, stages->frag, stages->geom, NULL, defines, __func__);
+ builtin_shaders[shader] = GPU_shader_create(
+ stages->vert, stages->frag, stages->geom, NULL, stages->defs, __func__);
}
return builtin_shaders[shader];
@@ -1171,11 +1148,11 @@ void GPU_shader_get_builtin_shader_code(
const char **r_vert, const char **r_frag,
const char **r_geom, const char **r_defines)
{
- const GPUShaderStages *stages = builtin_shader_stages + shader;
+ const GPUShaderStages *stages = &builtin_shader_stages[shader];
*r_vert = stages->vert;
*r_frag = stages->frag;
*r_geom = stages->geom;
- *r_defines = gpu_shader_get_builtin_shader_defines(shader);
+ *r_defines = stages->defs;
}
#define MAX_DEFINES 100