[Bf-blender-cvs] [3e4c8d48aab] master: Cleanup: DRW: Remove builtin 3D only shader usage

Clément Foucault noreply at git.blender.org
Wed Jun 3 11:03:15 CEST 2020


Commit: 3e4c8d48aab3de9211652d43f4275576dae146ce
Author: Clément Foucault
Date:   Wed Jun 3 10:29:32 2020 +0200
Branches: master
https://developer.blender.org/rB3e4c8d48aab3de9211652d43f4275576dae146ce

Cleanup: DRW: Remove builtin 3D only shader usage

===================================================================

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/basic/basic_engine.c
R100	source/blender/draw/engines/basic/shaders/conservative_depth_frag.glsl	source/blender/draw/engines/basic/shaders/depth_frag.glsl
R081	source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl	source/blender/draw/engines/basic/shaders/depth_vert.glsl
M	source/blender/draw/engines/external/external_engine.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager_shader.c

===================================================================

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 18c2c303f14..a26c150cb51 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -304,8 +304,8 @@ data_to_c_simple(engines/select/shaders/selection_id_3D_vert.glsl SRC)
 data_to_c_simple(engines/select/shaders/selection_id_frag.glsl SRC)
 
 data_to_c_simple(engines/basic/shaders/conservative_depth_geom.glsl SRC)
-data_to_c_simple(engines/basic/shaders/conservative_depth_vert.glsl SRC)
-data_to_c_simple(engines/basic/shaders/conservative_depth_frag.glsl SRC)
+data_to_c_simple(engines/basic/shaders/depth_vert.glsl SRC)
+data_to_c_simple(engines/basic/shaders/depth_frag.glsl SRC)
 
 data_to_c_simple(engines/overlay/shaders/antialiasing_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/antialiasing_vert.glsl SRC)
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index 6658fea7825..bbc3c407f14 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -37,8 +37,8 @@
 
 #define BASIC_ENGINE "BLENDER_BASIC"
 
-extern char datatoc_conservative_depth_frag_glsl[];
-extern char datatoc_conservative_depth_vert_glsl[];
+extern char datatoc_depth_frag_glsl[];
+extern char datatoc_depth_vert_glsl[];
 extern char datatoc_conservative_depth_geom_glsl[];
 
 extern char datatoc_common_view_lib_glsl[];
@@ -91,22 +91,28 @@ static void basic_engine_init(void *UNUSED(vedata))
 
   /* Depth prepass */
   if (!sh_data->depth) {
-    sh_data->depth = DRW_shader_create_3d_depth_only(draw_ctx->sh_cfg);
-
     const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
+
+    sh_data->depth = GPU_shader_create_from_arrays({
+        .vert = (const char *[]){sh_cfg->lib,
+                                 datatoc_common_view_lib_glsl,
+                                 datatoc_depth_vert_glsl,
+                                 NULL},
+        .frag = (const char *[]){datatoc_depth_frag_glsl, NULL},
+        .defs = (const char *[]){sh_cfg->def, NULL},
+    });
+
     sh_data->depth_conservative = GPU_shader_create_from_arrays({
         .vert = (const char *[]){sh_cfg->lib,
                                  datatoc_common_view_lib_glsl,
-                                 datatoc_conservative_depth_vert_glsl,
+                                 datatoc_depth_vert_glsl,
                                  NULL},
         .geom = (const char *[]){sh_cfg->lib,
                                  datatoc_common_view_lib_glsl,
                                  datatoc_conservative_depth_geom_glsl,
                                  NULL},
-        .frag = (const char *[]){datatoc_common_view_lib_glsl,
-                                 datatoc_conservative_depth_frag_glsl,
-                                 NULL},
-        .defs = (const char *[]){sh_cfg->def, NULL},
+        .frag = (const char *[]){datatoc_depth_frag_glsl, NULL},
+        .defs = (const char *[]){sh_cfg->def, "#define CONSERVATIVE_RASTER\n", NULL},
     });
   }
 }
@@ -233,6 +239,7 @@ static void basic_engine_free(void)
 {
   for (int i = 0; i < GPU_SHADER_CFG_LEN; i++) {
     BASIC_Shaders *sh_data = &e_data.sh_data[i];
+    DRW_SHADER_FREE_SAFE(sh_data->depth);
     DRW_SHADER_FREE_SAFE(sh_data->depth_conservative);
   }
 }
diff --git a/source/blender/draw/engines/basic/shaders/conservative_depth_frag.glsl b/source/blender/draw/engines/basic/shaders/depth_frag.glsl
similarity index 100%
rename from source/blender/draw/engines/basic/shaders/conservative_depth_frag.glsl
rename to source/blender/draw/engines/basic/shaders/depth_frag.glsl
diff --git a/source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl b/source/blender/draw/engines/basic/shaders/depth_vert.glsl
similarity index 81%
rename from source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl
rename to source/blender/draw/engines/basic/shaders/depth_vert.glsl
index c55a3211ff2..318d0acef6f 100644
--- a/source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl
+++ b/source/blender/draw/engines/basic/shaders/depth_vert.glsl
@@ -1,12 +1,16 @@
 
+#ifdef CONSERVATIVE_RASTER
 RESOURCE_ID_VARYING
+#endif
 
 in vec3 pos;
 
 void main()
 {
   GPU_INTEL_VERTEX_SHADER_WORKAROUND
+#ifdef CONSERVATIVE_RASTER
   PASS_RESOURCE_ID
+#endif
 
   vec3 world_pos = point_object_to_world(pos);
   gl_Position = point_world_to_ndc(world_pos);
diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c
index 6e636e4dc93..2f448b784ed 100644
--- a/source/blender/draw/engines/external/external_engine.c
+++ b/source/blender/draw/engines/external/external_engine.c
@@ -44,6 +44,11 @@
 
 #define EXTERNAL_ENGINE "BLENDER_EXTERNAL"
 
+extern char datatoc_depth_frag_glsl[];
+extern char datatoc_depth_vert_glsl[];
+
+extern char datatoc_common_view_lib_glsl[];
+
 /* *********** LISTS *********** */
 
 /* GPUViewport.storage
@@ -106,7 +111,16 @@ static void external_engine_init(void *vedata)
 
   /* Depth prepass */
   if (!e_data.depth_sh) {
-    e_data.depth_sh = DRW_shader_create_3d_depth_only(GPU_SHADER_CFG_DEFAULT);
+    const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[GPU_SHADER_CFG_DEFAULT];
+
+    e_data.depth_sh = GPU_shader_create_from_arrays({
+        .vert = (const char *[]){sh_cfg->lib,
+                                 datatoc_common_view_lib_glsl,
+                                 datatoc_depth_vert_glsl,
+                                 NULL},
+        .frag = (const char *[]){datatoc_depth_frag_glsl, NULL},
+        .defs = (const char *[]){sh_cfg->def, NULL},
+    });
   }
 
   if (!stl->g_data) {
@@ -277,7 +291,7 @@ static void external_draw_scene(void *vedata)
 
 static void external_engine_free(void)
 {
-  /* All shaders are builtin. */
+  DRW_SHADER_FREE_SAFE(e_data.depth_sh);
 }
 
 static const DrawEngineDataSize external_data_size = DRW_VIEWPORT_DATA_SIZE(EXTERNAL_Data);
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index cde4035eaf1..e7dd9e449b7 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -210,10 +210,7 @@ struct GPUShader *DRW_shader_create_with_transform_feedback(const char *vert,
                                                             const eGPUShaderTFBType prim_type,
                                                             const char **varying_names,
                                                             const int varying_count);
-struct GPUShader *DRW_shader_create_2d(const char *frag, const char *defines);
-struct GPUShader *DRW_shader_create_3d(const char *frag, const char *defines);
 struct GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines);
-struct GPUShader *DRW_shader_create_3d_depth_only(eGPUShaderConfig slot);
 struct GPUMaterial *DRW_shader_find_from_world(struct World *wo,
                                                const void *engine_type,
                                                const int options,
diff --git a/source/blender/draw/intern/draw_manager_shader.c b/source/blender/draw/intern/draw_manager_shader.c
index 087bf7cff9a..6304b707cb9 100644
--- a/source/blender/draw/intern/draw_manager_shader.c
+++ b/source/blender/draw/intern/draw_manager_shader.c
@@ -343,27 +343,12 @@ GPUShader *DRW_shader_create_with_transform_feedback(const char *vert,
                               __func__);
 }
 
-GPUShader *DRW_shader_create_2d(const char *frag, const char *defines)
-{
-  return GPU_shader_create(datatoc_gpu_shader_2D_vert_glsl, frag, NULL, NULL, defines, __func__);
-}
-
-GPUShader *DRW_shader_create_3d(const char *frag, const char *defines)
-{
-  return GPU_shader_create(datatoc_gpu_shader_3D_vert_glsl, frag, NULL, NULL, defines, __func__);
-}
-
 GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines)
 {
   return GPU_shader_create(
       datatoc_common_fullscreen_vert_glsl, frag, NULL, NULL, defines, __func__);
 }
 
-GPUShader *DRW_shader_create_3d_depth_only(eGPUShaderConfig sh_cfg)
-{
-  return GPU_shader_get_builtin_shader_with_config(GPU_SHADER_3D_DEPTH_ONLY, sh_cfg);
-}
-
 GPUMaterial *DRW_shader_find_from_world(World *wo,
                                         const void *engine_type,
                                         const int options,



More information about the Bf-blender-cvs mailing list