From 3e4c8d48aab3de9211652d43f4275576dae146ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Wed, 3 Jun 2020 10:29:32 +0200 Subject: Cleanup: DRW: Remove builtin 3D only shader usage --- source/blender/draw/CMakeLists.txt | 4 ++-- source/blender/draw/engines/basic/basic_engine.c | 25 ++++++++++++++-------- .../basic/shaders/conservative_depth_frag.glsl | 5 ----- .../basic/shaders/conservative_depth_vert.glsl | 17 --------------- .../draw/engines/basic/shaders/depth_frag.glsl | 5 +++++ .../draw/engines/basic/shaders/depth_vert.glsl | 21 ++++++++++++++++++ .../draw/engines/external/external_engine.c | 18 ++++++++++++++-- source/blender/draw/intern/DRW_render.h | 3 --- source/blender/draw/intern/draw_manager_shader.c | 15 ------------- 9 files changed, 60 insertions(+), 53 deletions(-) delete mode 100644 source/blender/draw/engines/basic/shaders/conservative_depth_frag.glsl delete mode 100644 source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl create mode 100644 source/blender/draw/engines/basic/shaders/depth_frag.glsl create mode 100644 source/blender/draw/engines/basic/shaders/depth_vert.glsl 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/conservative_depth_frag.glsl deleted file mode 100644 index ff4a015c335..00000000000 --- a/source/blender/draw/engines/basic/shaders/conservative_depth_frag.glsl +++ /dev/null @@ -1,5 +0,0 @@ - -void main() -{ - /* Passthrough shader. */ -} diff --git a/source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl b/source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl deleted file mode 100644 index c55a3211ff2..00000000000 --- a/source/blender/draw/engines/basic/shaders/conservative_depth_vert.glsl +++ /dev/null @@ -1,17 +0,0 @@ - -RESOURCE_ID_VARYING - -in vec3 pos; - -void main() -{ - GPU_INTEL_VERTEX_SHADER_WORKAROUND - PASS_RESOURCE_ID - - vec3 world_pos = point_object_to_world(pos); - gl_Position = point_world_to_ndc(world_pos); - -#ifdef USE_WORLD_CLIP_PLANES - world_clip_planes_calc_clip_distance(world_pos); -#endif -} diff --git a/source/blender/draw/engines/basic/shaders/depth_frag.glsl b/source/blender/draw/engines/basic/shaders/depth_frag.glsl new file mode 100644 index 00000000000..ff4a015c335 --- /dev/null +++ b/source/blender/draw/engines/basic/shaders/depth_frag.glsl @@ -0,0 +1,5 @@ + +void main() +{ + /* Passthrough shader. */ +} diff --git a/source/blender/draw/engines/basic/shaders/depth_vert.glsl b/source/blender/draw/engines/basic/shaders/depth_vert.glsl new file mode 100644 index 00000000000..318d0acef6f --- /dev/null +++ b/source/blender/draw/engines/basic/shaders/depth_vert.glsl @@ -0,0 +1,21 @@ + +#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); + +#ifdef USE_WORLD_CLIP_PLANES + world_clip_planes_calc_clip_distance(world_pos); +#endif +} 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, -- cgit v1.2.3