From dbd7f36da8ec3ac1c2898aee346beecb86aac8a2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 6 Feb 2019 09:15:16 +1100 Subject: GPU: refactor clipped drawing from DRW into GPU Needed to fix T61196, supporting clipped back-buffer in the 3D view which is done outside the draw module. It was also inconvenient having DRW_shader_* versions of GPU_shader_* API calls. - Clipping distances are now supported as a shader configuration for builtin shaders. - Add shader config argument when accessing builtin shaders. - Move GPU_shader_create_from_arrays() from DRW to GPU. --- source/blender/draw/engines/basic/basic_engine.c | 8 ++++---- source/blender/draw/engines/external/external_engine.c | 2 +- source/blender/draw/engines/workbench/workbench_deferred.c | 6 +++--- source/blender/draw/engines/workbench/workbench_forward.c | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) (limited to 'source/blender/draw/engines') diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c index d22f4ccb86c..cdc625fc297 100644 --- a/source/blender/draw/engines/basic/basic_engine.c +++ b/source/blender/draw/engines/basic/basic_engine.c @@ -65,7 +65,7 @@ typedef struct BASIC_Shaders { /* *********** STATIC *********** */ static struct { - BASIC_Shaders sh_data[DRW_SHADER_SLOT_LEN]; + BASIC_Shaders sh_data[GPU_SHADER_CFG_LEN]; } e_data = {NULL}; /* Engine data */ typedef struct BASIC_PrivateData { @@ -79,11 +79,11 @@ typedef struct BASIC_PrivateData { static void basic_engine_init(void *UNUSED(vedata)) { const DRWContextState *draw_ctx = DRW_context_state_get(); - BASIC_Shaders *sh_data = &e_data.sh_data[draw_ctx->shader_slot]; + BASIC_Shaders *sh_data = &e_data.sh_data[draw_ctx->shader_cfg]; /* Depth prepass */ if (!sh_data->depth) { - sh_data->depth = DRW_shader_create_3D_depth_only(draw_ctx->shader_slot); + sh_data->depth = DRW_shader_create_3D_depth_only(draw_ctx->shader_cfg); } } @@ -93,7 +93,7 @@ static void basic_cache_init(void *vedata) BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl; const DRWContextState *draw_ctx = DRW_context_state_get(); - BASIC_Shaders *sh_data = &e_data.sh_data[draw_ctx->shader_slot]; + BASIC_Shaders *sh_data = &e_data.sh_data[draw_ctx->shader_cfg]; const RegionView3D *rv3d = draw_ctx->rv3d; const bool is_clip = (rv3d->rflag & RV3D_CLIPPING) != 0; diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c index d7e290917aa..d4930889449 100644 --- a/source/blender/draw/engines/external/external_engine.c +++ b/source/blender/draw/engines/external/external_engine.c @@ -91,7 +91,7 @@ static void external_engine_init(void *UNUSED(vedata)) { /* Depth prepass */ if (!e_data.depth_sh) { - e_data.depth_sh = DRW_shader_create_3D_depth_only(DRW_SHADER_SLOT_DEFAULT); + e_data.depth_sh = DRW_shader_create_3D_depth_only(GPU_SHADER_CFG_DEFAULT); } } diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c index 18b4712cc86..0991546e74b 100644 --- a/source/blender/draw/engines/workbench/workbench_deferred.c +++ b/source/blender/draw/engines/workbench/workbench_deferred.c @@ -88,7 +88,7 @@ static struct { /* Shaders */ extern char datatoc_common_hair_lib_glsl[]; -extern char datatoc_common_world_clip_lib_glsl[]; +extern char datatoc_gpu_shader_cfg_world_clip_lib_glsl[]; extern char datatoc_workbench_prepass_vert_glsl[]; extern char datatoc_workbench_prepass_frag_glsl[]; @@ -160,14 +160,14 @@ static char *workbench_build_prepass_vert(bool is_hair) char *str = NULL; if (!is_hair) { return BLI_string_joinN( - datatoc_common_world_clip_lib_glsl, + datatoc_gpu_shader_cfg_world_clip_lib_glsl, datatoc_workbench_prepass_vert_glsl); } DynStr *ds = BLI_dynstr_new(); BLI_dynstr_append(ds, datatoc_common_hair_lib_glsl); - BLI_dynstr_append(ds, datatoc_common_world_clip_lib_glsl); + BLI_dynstr_append(ds, datatoc_gpu_shader_cfg_world_clip_lib_glsl); BLI_dynstr_append(ds, datatoc_workbench_prepass_vert_glsl); str = BLI_dynstr_get_cstring(ds); diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index 1f3d14102a6..10dfbb44418 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -61,7 +61,7 @@ static struct { } e_data = {{NULL}}; /* Shaders */ -extern char datatoc_common_world_clip_lib_glsl[]; +extern char datatoc_gpu_shader_cfg_world_clip_lib_glsl[]; extern char datatoc_common_hair_lib_glsl[]; extern char datatoc_workbench_forward_composite_frag_glsl[]; @@ -82,14 +82,14 @@ static char *workbench_build_forward_vert(bool is_hair) char *str = NULL; if (!is_hair) { return BLI_string_joinN( - datatoc_common_world_clip_lib_glsl, + datatoc_gpu_shader_cfg_world_clip_lib_glsl, datatoc_workbench_prepass_vert_glsl); } DynStr *ds = BLI_dynstr_new(); BLI_dynstr_append(ds, datatoc_common_hair_lib_glsl); - BLI_dynstr_append(ds, datatoc_common_world_clip_lib_glsl); + BLI_dynstr_append(ds, datatoc_gpu_shader_cfg_world_clip_lib_glsl); BLI_dynstr_append(ds, datatoc_workbench_prepass_vert_glsl); str = BLI_dynstr_get_cstring(ds); -- cgit v1.2.3