diff --git a/source/blender/draw/engines/eevee_next/eevee_shader.cc b/source/blender/draw/engines/eevee_next/eevee_shader.cc index 0281c088fc3..563a934d94c 100644 --- a/source/blender/draw/engines/eevee_next/eevee_shader.cc +++ b/source/blender/draw/engines/eevee_next/eevee_shader.cc @@ -84,7 +84,7 @@ ShaderModule::~ShaderModule() } for (GPUShader *&shader : shaders_) { - DRW_SHADER_FREE_SAFE(shader); + GPU_SHADER_FREE_SAFE(shader); } } diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_data.cc b/source/blender/draw/engines/gpencil/gpencil_draw_data.cc index 210a7ac842f..18124f12b8d 100644 --- a/source/blender/draw/engines/gpencil/gpencil_draw_data.cc +++ b/source/blender/draw/engines/gpencil/gpencil_draw_data.cc @@ -428,13 +428,13 @@ GPENCIL_LightPool *gpencil_light_pool_create(GPENCIL_PrivateData *pd, Object * / void gpencil_material_pool_free(void *storage) { GPENCIL_MaterialPool *matpool = (GPENCIL_MaterialPool *)storage; - DRW_UBO_FREE_SAFE(matpool->ubo); + GPU_UBO_FREE_SAFE(matpool->ubo); } void gpencil_light_pool_free(void *storage) { GPENCIL_LightPool *lightpool = (GPENCIL_LightPool *)storage; - DRW_UBO_FREE_SAFE(lightpool->ubo); + GPU_UBO_FREE_SAFE(lightpool->ubo); } /** \} */ diff --git a/source/blender/draw/engines/gpencil/gpencil_shader_c.cc b/source/blender/draw/engines/gpencil/gpencil_shader_c.cc index a5f93d497ee..006a870c916 100644 --- a/source/blender/draw/engines/gpencil/gpencil_shader_c.cc +++ b/source/blender/draw/engines/gpencil/gpencil_shader_c.cc @@ -50,22 +50,22 @@ static struct { void GPENCIL_shader_free() { - DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[0]); - DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[1]); - DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[2]); - DRW_SHADER_FREE_SAFE(g_shaders.gpencil_sh); - DRW_SHADER_FREE_SAFE(g_shaders.composite_sh); - DRW_SHADER_FREE_SAFE(g_shaders.layer_blend_sh); - DRW_SHADER_FREE_SAFE(g_shaders.depth_merge_sh); - DRW_SHADER_FREE_SAFE(g_shaders.mask_invert_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_composite_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_colorize_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_blur_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_glow_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_pixel_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_rim_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_shadow_sh); - DRW_SHADER_FREE_SAFE(g_shaders.fx_transform_sh); + GPU_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[0]); + GPU_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[1]); + GPU_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[2]); + GPU_SHADER_FREE_SAFE(g_shaders.gpencil_sh); + GPU_SHADER_FREE_SAFE(g_shaders.composite_sh); + GPU_SHADER_FREE_SAFE(g_shaders.layer_blend_sh); + GPU_SHADER_FREE_SAFE(g_shaders.depth_merge_sh); + GPU_SHADER_FREE_SAFE(g_shaders.mask_invert_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_composite_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_colorize_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_blur_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_glow_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_pixel_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_rim_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_shadow_sh); + GPU_SHADER_FREE_SAFE(g_shaders.fx_transform_sh); } GPUShader *GPENCIL_shader_antialiasing(int stage) diff --git a/source/blender/draw/engines/image/image_shader.hh b/source/blender/draw/engines/image/image_shader.hh index 36970b49a7d..e2e52e45561 100644 --- a/source/blender/draw/engines/image/image_shader.hh +++ b/source/blender/draw/engines/image/image_shader.hh @@ -22,7 +22,7 @@ class ShaderModule { struct ShaderDeleter { void operator()(GPUShader *shader) { - DRW_SHADER_FREE_SAFE(shader); + GPU_SHADER_FREE_SAFE(shader); } }; using ShaderPtr = std::unique_ptr; diff --git a/source/blender/draw/engines/overlay/overlay_next_instance.hh b/source/blender/draw/engines/overlay/overlay_next_instance.hh index 13033e78dfe..ba02bc6e87b 100644 --- a/source/blender/draw/engines/overlay/overlay_next_instance.hh +++ b/source/blender/draw/engines/overlay/overlay_next_instance.hh @@ -118,7 +118,7 @@ class Instance { ~Instance() { - DRW_UBO_FREE_SAFE(grid_ubo); + GPU_UBO_FREE_SAFE(grid_ubo); } void init(); diff --git a/source/blender/draw/engines/overlay/overlay_next_private.hh b/source/blender/draw/engines/overlay/overlay_next_private.hh index b586085ba49..6f6b2e365f9 100644 --- a/source/blender/draw/engines/overlay/overlay_next_private.hh +++ b/source/blender/draw/engines/overlay/overlay_next_private.hh @@ -334,7 +334,7 @@ class ShaderModule { struct ShaderDeleter { void operator()(GPUShader *shader) { - DRW_SHADER_FREE_SAFE(shader); + GPU_SHADER_FREE_SAFE(shader); } }; using ShaderPtr = std::unique_ptr; diff --git a/source/blender/draw/engines/select/select_debug_engine.cc b/source/blender/draw/engines/select/select_debug_engine.cc index a8493cc2d15..f70bdce478e 100644 --- a/source/blender/draw/engines/select/select_debug_engine.cc +++ b/source/blender/draw/engines/select/select_debug_engine.cc @@ -70,7 +70,7 @@ static void select_debug_draw_scene(void * /*vedata*/) static void select_debug_engine_free() { - DRW_SHADER_FREE_SAFE(e_data.select_debug_sh); + GPU_SHADER_FREE_SAFE(e_data.select_debug_sh); } /** \} */ diff --git a/source/blender/draw/engines/select/select_engine.cc b/source/blender/draw/engines/select/select_engine.cc index 30d8d9e9331..650e176cb79 100644 --- a/source/blender/draw/engines/select/select_engine.cc +++ b/source/blender/draw/engines/select/select_engine.cc @@ -305,8 +305,8 @@ static void select_engine_free() SelectEngineData &e_data = get_engine_data(); for (int sh_data_index = 0; sh_data_index < ARRAY_SIZE(e_data.sh_data); sh_data_index++) { SELECTID_Shaders *sh_data = &e_data.sh_data[sh_data_index]; - DRW_SHADER_FREE_SAFE(sh_data->select_id_flat); - DRW_SHADER_FREE_SAFE(sh_data->select_id_uniform); + GPU_SHADER_FREE_SAFE(sh_data->select_id_flat); + GPU_SHADER_FREE_SAFE(sh_data->select_id_uniform); } GPU_TEXTURE_FREE_SAFE(e_data.texture_u32); diff --git a/source/blender/draw/engines/workbench/workbench_private.hh b/source/blender/draw/engines/workbench/workbench_private.hh index 65d7bfaa388..7ad5caac835 100644 --- a/source/blender/draw/engines/workbench/workbench_private.hh +++ b/source/blender/draw/engines/workbench/workbench_private.hh @@ -33,7 +33,7 @@ class StaticShader : NonCopyable { ~StaticShader() { - DRW_SHADER_FREE_SAFE(shader_); + GPU_SHADER_FREE_SAFE(shader_); } GPUShader *get() diff --git a/source/blender/draw/intern/DRW_render.hh b/source/blender/draw/intern/DRW_render.hh index 0da12646118..d2e244fd0f5 100644 --- a/source/blender/draw/intern/DRW_render.hh +++ b/source/blender/draw/intern/DRW_render.hh @@ -135,14 +135,6 @@ struct DrawEngineType { void (*store_metadata)(void *vedata, RenderResult *render_result); }; -#define DRW_UBO_FREE_SAFE(ubo) \ - do { \ - if (ubo != nullptr) { \ - GPU_uniformbuf_free(ubo); \ - ubo = nullptr; \ - } \ - } while (0) - /* Shaders */ void DRW_shader_init(); void DRW_shader_exit(); @@ -166,14 +158,6 @@ GPUMaterial *DRW_shader_from_material( void *thunk, GPUMaterialPassReplacementCallbackFn pass_replacement_cb = nullptr); void DRW_shader_queue_optimize_material(GPUMaterial *mat); -void DRW_shader_free(GPUShader *shader); -#define DRW_SHADER_FREE_SAFE(shader) \ - do { \ - if (shader != nullptr) { \ - DRW_shader_free(shader); \ - shader = nullptr; \ - } \ - } while (0) /* Viewport. */ diff --git a/source/blender/draw/intern/draw_manager_c.cc b/source/blender/draw/intern/draw_manager_c.cc index 1ade549e47f..857794c73a3 100644 --- a/source/blender/draw/intern/draw_manager_c.cc +++ b/source/blender/draw/intern/draw_manager_c.cc @@ -2948,9 +2948,9 @@ void DRW_engines_free() drw_debug_module_free(DST.debug); DST.debug = nullptr; - DRW_UBO_FREE_SAFE(G_draw.block_ubo); - DRW_UBO_FREE_SAFE(G_draw.view_ubo); - DRW_UBO_FREE_SAFE(G_draw.clipping_ubo); + GPU_UBO_FREE_SAFE(G_draw.block_ubo); + GPU_UBO_FREE_SAFE(G_draw.view_ubo); + GPU_UBO_FREE_SAFE(G_draw.clipping_ubo); GPU_TEXTURE_FREE_SAFE(G_draw.ramp); GPU_TEXTURE_FREE_SAFE(G_draw.weight_ramp); diff --git a/source/blender/draw/intern/draw_shader.cc b/source/blender/draw/intern/draw_shader.cc index 9a69ed89797..22ebffdd4c1 100644 --- a/source/blender/draw/intern/draw_shader.cc +++ b/source/blender/draw/intern/draw_shader.cc @@ -105,12 +105,12 @@ GPUShader *DRW_shader_draw_command_generate_get() void DRW_shaders_free() { for (int i = 0; i < PART_REFINE_MAX_SHADER; i++) { - DRW_SHADER_FREE_SAFE(e_data.hair_refine_sh[i]); + GPU_SHADER_FREE_SAFE(e_data.hair_refine_sh[i]); } - DRW_SHADER_FREE_SAFE(e_data.debug_print_display_sh); - DRW_SHADER_FREE_SAFE(e_data.debug_draw_display_sh); - DRW_SHADER_FREE_SAFE(e_data.draw_visibility_compute_sh); - DRW_SHADER_FREE_SAFE(e_data.draw_view_finalize_sh); - DRW_SHADER_FREE_SAFE(e_data.draw_resource_finalize_sh); - DRW_SHADER_FREE_SAFE(e_data.draw_command_generate_sh); + GPU_SHADER_FREE_SAFE(e_data.debug_print_display_sh); + GPU_SHADER_FREE_SAFE(e_data.debug_draw_display_sh); + GPU_SHADER_FREE_SAFE(e_data.draw_visibility_compute_sh); + GPU_SHADER_FREE_SAFE(e_data.draw_view_finalize_sh); + GPU_SHADER_FREE_SAFE(e_data.draw_resource_finalize_sh); + GPU_SHADER_FREE_SAFE(e_data.draw_command_generate_sh); } diff --git a/source/blender/gpu/GPU_shader.hh b/source/blender/gpu/GPU_shader.hh index 2d9db8243f4..1a0d733e4da 100644 --- a/source/blender/gpu/GPU_shader.hh +++ b/source/blender/gpu/GPU_shader.hh @@ -419,3 +419,11 @@ int GPU_shader_get_builtin_block(GPUShader *shader, int builtin); int GPU_shader_get_uniform_block(GPUShader *shader, const char *name); /** \} */ + +#define GPU_SHADER_FREE_SAFE(shader) \ + do { \ + if (shader != nullptr) { \ + GPU_shader_free(shader); \ + shader = nullptr; \ + } \ + } while (0) diff --git a/source/blender/gpu/GPU_uniform_buffer.hh b/source/blender/gpu/GPU_uniform_buffer.hh index d5aa4f19a65..245d2e5ff2e 100644 --- a/source/blender/gpu/GPU_uniform_buffer.hh +++ b/source/blender/gpu/GPU_uniform_buffer.hh @@ -52,3 +52,11 @@ void GPU_uniformbuf_clear_to_zero(GPUUniformBuf *ubo); #define GPU_ATTRIBUTE_UBO_BLOCK_NAME "unf_attrs" #define GPU_LAYER_ATTRIBUTE_UBO_BLOCK_NAME "drw_layer_attrs" constexpr static int GPU_NODE_TREE_UBO_SLOT = 0; + +#define GPU_UBO_FREE_SAFE(ubo) \ + do { \ + if (ubo != nullptr) { \ + GPU_uniformbuf_free(ubo); \ + ubo = nullptr; \ + } \ + } while (0)