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:
authorClément Foucault <foucault.clem@gmail.com>2019-05-07 19:01:14 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-08 18:49:28 +0300
commit820a64b9e5cf9c737fd484c6794e2e22c3f66d9f (patch)
treeba6f2ab7457de787506723c10b0b52422e931da5
parent9fea65a93def1ee72fdc1585a381607441f76c21 (diff)
DRW: Replace BLI_mempool by BLI_memblock
This remove a avoid the big overhead present in BLI_mempool when it is cleared.
-rw-r--r--source/blender/draw/intern/draw_manager.c34
-rw-r--r--source/blender/draw/intern/draw_manager_data.c27
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c8
-rw-r--r--source/blender/gpu/GPU_viewport.h12
-rw-r--r--source/blender/gpu/intern/gpu_viewport.c20
5 files changed, 50 insertions, 51 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 488027a3155..f0d802c69e1 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -23,7 +23,7 @@
#include <stdio.h>
#include "BLI_listbase.h"
-#include "BLI_mempool.h"
+#include "BLI_memblock.h"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_threads.h"
@@ -526,19 +526,19 @@ static void drw_viewport_cache_resize(void)
if (DST.vmempool != NULL) {
/* Release Image textures. */
- BLI_mempool_iter iter;
+ BLI_memblock_iter iter;
GPUTexture **tex;
- BLI_mempool_iternew(DST.vmempool->images, &iter);
- while ((tex = BLI_mempool_iterstep(&iter))) {
+ BLI_memblock_iternew(DST.vmempool->images, &iter);
+ while ((tex = BLI_memblock_iterstep(&iter))) {
GPU_texture_free(*tex);
}
- BLI_mempool_clear_ex(DST.vmempool->calls, BLI_mempool_len(DST.vmempool->calls));
- BLI_mempool_clear_ex(DST.vmempool->states, BLI_mempool_len(DST.vmempool->states));
- BLI_mempool_clear_ex(DST.vmempool->shgroups, BLI_mempool_len(DST.vmempool->shgroups));
- BLI_mempool_clear_ex(DST.vmempool->uniforms, BLI_mempool_len(DST.vmempool->uniforms));
- BLI_mempool_clear_ex(DST.vmempool->passes, BLI_mempool_len(DST.vmempool->passes));
- BLI_mempool_clear_ex(DST.vmempool->images, BLI_mempool_len(DST.vmempool->images));
+ BLI_memblock_clear(DST.vmempool->calls);
+ BLI_memblock_clear(DST.vmempool->states);
+ BLI_memblock_clear(DST.vmempool->shgroups);
+ BLI_memblock_clear(DST.vmempool->uniforms);
+ BLI_memblock_clear(DST.vmempool->passes);
+ BLI_memblock_clear(DST.vmempool->images);
}
DRW_instance_data_list_free_unused(DST.idatalist);
@@ -603,24 +603,22 @@ static void drw_viewport_var_init(void)
DST.vmempool = GPU_viewport_mempool_get(DST.viewport);
if (DST.vmempool->calls == NULL) {
- DST.vmempool->calls = BLI_mempool_create(sizeof(DRWCall), 0, 512, 0);
+ DST.vmempool->calls = BLI_memblock_create(sizeof(DRWCall));
}
if (DST.vmempool->states == NULL) {
- DST.vmempool->states = BLI_mempool_create(
- sizeof(DRWCallState), 0, 512, BLI_MEMPOOL_ALLOW_ITER);
+ DST.vmempool->states = BLI_memblock_create(sizeof(DRWCallState));
}
if (DST.vmempool->shgroups == NULL) {
- DST.vmempool->shgroups = BLI_mempool_create(sizeof(DRWShadingGroup), 0, 256, 0);
+ DST.vmempool->shgroups = BLI_memblock_create(sizeof(DRWShadingGroup));
}
if (DST.vmempool->uniforms == NULL) {
- DST.vmempool->uniforms = BLI_mempool_create(sizeof(DRWUniform), 0, 512, 0);
+ DST.vmempool->uniforms = BLI_memblock_create(sizeof(DRWUniform));
}
if (DST.vmempool->passes == NULL) {
- DST.vmempool->passes = BLI_mempool_create(sizeof(DRWPass), 0, 64, 0);
+ DST.vmempool->passes = BLI_memblock_create(sizeof(DRWPass));
}
if (DST.vmempool->images == NULL) {
- DST.vmempool->images = BLI_mempool_create(
- sizeof(GPUTexture *), 0, 512, BLI_MEMPOOL_ALLOW_ITER);
+ DST.vmempool->images = BLI_memblock_create(sizeof(GPUTexture *));
}
DST.idatalist = GPU_viewport_instance_data_list_get(DST.viewport);
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 90ffdc194e0..cb01b23ee72 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -37,6 +37,7 @@
#include "BLI_hash.h"
#include "BLI_link_utils.h"
#include "BLI_mempool.h"
+#include "BLI_memblock.h"
#include "GPU_buffers.h"
@@ -76,7 +77,7 @@ static void drw_shgroup_uniform_create_ex(DRWShadingGroup *shgroup,
int length,
int arraysize)
{
- DRWUniform *uni = BLI_mempool_alloc(DST.vmempool->uniforms);
+ DRWUniform *uni = BLI_memblock_alloc(DST.vmempool->uniforms);
uni->location = loc;
uni->type = type;
uni->length = length;
@@ -390,7 +391,7 @@ static void drw_call_state_update_matflag(DRWCallState *state,
static DRWCallState *drw_call_state_create(DRWShadingGroup *shgroup, float (*obmat)[4], Object *ob)
{
- DRWCallState *state = BLI_mempool_alloc(DST.vmempool->states);
+ DRWCallState *state = BLI_memblock_alloc(DST.vmempool->states);
state->flag = 0;
state->cache_id = 0;
state->visibility_cb = NULL;
@@ -445,7 +446,7 @@ void DRW_shgroup_call_add(DRWShadingGroup *shgroup, GPUBatch *geom, float (*obma
BLI_assert(geom != NULL);
BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
- DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
call->state = drw_call_state_create(shgroup, obmat, NULL);
call->type = DRW_CALL_SINGLE;
call->single.geometry = geom;
@@ -463,7 +464,7 @@ void DRW_shgroup_call_range_add(
BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
BLI_assert(v_count);
- DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
call->state = drw_call_state_create(shgroup, obmat, NULL);
call->type = DRW_CALL_RANGE;
call->range.geometry = geom;
@@ -484,7 +485,7 @@ static void drw_shgroup_call_procedural_add_ex(DRWShadingGroup *shgroup,
{
BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
- DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
if (ob) {
call->state = drw_call_state_object(shgroup, ob->obmat, ob);
}
@@ -529,7 +530,7 @@ void DRW_shgroup_call_object_add_ex(
BLI_assert(geom != NULL);
BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
- DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
call->state = drw_call_state_object(shgroup, ob->obmat, ob);
call->type = DRW_CALL_SINGLE;
call->single.geometry = geom;
@@ -554,7 +555,7 @@ void DRW_shgroup_call_object_add_with_callback(DRWShadingGroup *shgroup,
BLI_assert(geom != NULL);
BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
- DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
call->state = drw_call_state_object(shgroup, ob->obmat, ob);
call->state->visibility_cb = callback;
call->state->user_data = user_data;
@@ -576,7 +577,7 @@ void DRW_shgroup_call_instances_add(DRWShadingGroup *shgroup,
BLI_assert(geom != NULL);
BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
- DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
call->state = drw_call_state_create(shgroup, obmat, NULL);
call->type = DRW_CALL_INSTANCES;
call->instances.geometry = geom;
@@ -597,7 +598,7 @@ void DRW_shgroup_call_object_instances_add(DRWShadingGroup *shgroup,
BLI_assert(geom != NULL);
BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
- DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
call->state = drw_call_state_object(shgroup, ob->obmat, ob);
call->type = DRW_CALL_INSTANCES;
call->instances.geometry = geom;
@@ -963,7 +964,7 @@ static void drw_shgroup_batching_init(DRWShadingGroup *shgroup,
static DRWShadingGroup *drw_shgroup_create_ex(struct GPUShader *shader, DRWPass *pass)
{
- DRWShadingGroup *shgroup = BLI_mempool_alloc(DST.vmempool->shgroups);
+ DRWShadingGroup *shgroup = BLI_memblock_alloc(DST.vmempool->shgroups);
BLI_LINKS_APPEND(&pass->shgroups, shgroup);
@@ -1016,7 +1017,7 @@ static DRWShadingGroup *drw_shgroup_material_inputs(DRWShadingGroup *grp,
GPUTexture *tex = NULL;
if (input->ima) {
- GPUTexture **tex_ref = BLI_mempool_alloc(DST.vmempool->images);
+ GPUTexture **tex_ref = BLI_memblock_alloc(DST.vmempool->images);
*tex_ref = tex = GPU_texture_from_blender(
input->ima, input->iuser, GL_TEXTURE_2D, input->image_isdata);
@@ -1268,7 +1269,7 @@ DRWShadingGroup *DRW_shgroup_create_sub(DRWShadingGroup *shgroup)
/* Remove this assertion if needed but implement the other cases first! */
BLI_assert(shgroup->type == DRW_SHG_NORMAL);
- DRWShadingGroup *shgroup_new = BLI_mempool_alloc(DST.vmempool->shgroups);
+ DRWShadingGroup *shgroup_new = BLI_memblock_alloc(DST.vmempool->shgroups);
*shgroup_new = *shgroup;
shgroup_new->uniforms = NULL;
@@ -1288,7 +1289,7 @@ DRWShadingGroup *DRW_shgroup_create_sub(DRWShadingGroup *shgroup)
DRWPass *DRW_pass_create(const char *name, DRWState state)
{
- DRWPass *pass = BLI_mempool_alloc(DST.vmempool->passes);
+ DRWPass *pass = BLI_memblock_alloc(DST.vmempool->passes);
pass->state = state;
if (((G.debug_value > 20) && (G.debug_value < 30)) || (G.debug & G_DEBUG)) {
BLI_strncpy(pass->name, name, MAX_PASS_NAME);
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 75f552da2d7..e29b64c7b1f 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -23,7 +23,7 @@
#include "draw_manager.h"
#include "BLI_math_bits.h"
-#include "BLI_mempool.h"
+#include "BLI_memblock.h"
#include "BKE_global.h"
@@ -1392,10 +1392,10 @@ static void drw_update_view(void)
DST.state_cache_id = 1;
/* We must reset all CallStates to ensure that not
* a single one stayed with cache_id equal to 1. */
- BLI_mempool_iter iter;
+ BLI_memblock_iter iter;
DRWCallState *state;
- BLI_mempool_iternew(DST.vmempool->states, &iter);
- while ((state = BLI_mempool_iterstep(&iter))) {
+ BLI_memblock_iternew(DST.vmempool->states, &iter);
+ while ((state = BLI_memblock_iterstep(&iter))) {
state->cache_id = 0;
}
}
diff --git a/source/blender/gpu/GPU_viewport.h b/source/blender/gpu/GPU_viewport.h
index 198a9ec98e2..70626ccb39b 100644
--- a/source/blender/gpu/GPU_viewport.h
+++ b/source/blender/gpu/GPU_viewport.h
@@ -37,12 +37,12 @@ typedef struct GPUViewport GPUViewport;
/* Contains memory pools information */
typedef struct ViewportMemoryPool {
- struct BLI_mempool *calls;
- struct BLI_mempool *states;
- struct BLI_mempool *shgroups;
- struct BLI_mempool *uniforms;
- struct BLI_mempool *passes;
- struct BLI_mempool *images;
+ struct BLI_memblock *calls;
+ struct BLI_memblock *states;
+ struct BLI_memblock *shgroups;
+ struct BLI_memblock *uniforms;
+ struct BLI_memblock *passes;
+ struct BLI_memblock *images;
} ViewportMemoryPool;
/* All FramebufferLists are just the same pointers with different names */
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
index 558b3f025a8..88373dc9fe1 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -27,7 +27,7 @@
#include "BLI_listbase.h"
#include "BLI_rect.h"
-#include "BLI_mempool.h"
+#include "BLI_memblock.h"
#include "BIF_gl.h"
@@ -618,28 +618,28 @@ void GPU_viewport_free(GPUViewport *viewport)
MEM_freeN(viewport->txl);
if (viewport->vmempool.calls != NULL) {
- BLI_mempool_destroy(viewport->vmempool.calls);
+ BLI_memblock_destroy(viewport->vmempool.calls);
}
if (viewport->vmempool.states != NULL) {
- BLI_mempool_destroy(viewport->vmempool.states);
+ BLI_memblock_destroy(viewport->vmempool.states);
}
if (viewport->vmempool.shgroups != NULL) {
- BLI_mempool_destroy(viewport->vmempool.shgroups);
+ BLI_memblock_destroy(viewport->vmempool.shgroups);
}
if (viewport->vmempool.uniforms != NULL) {
- BLI_mempool_destroy(viewport->vmempool.uniforms);
+ BLI_memblock_destroy(viewport->vmempool.uniforms);
}
if (viewport->vmempool.passes != NULL) {
- BLI_mempool_destroy(viewport->vmempool.passes);
+ BLI_memblock_destroy(viewport->vmempool.passes);
}
if (viewport->vmempool.images != NULL) {
- BLI_mempool_iter iter;
+ BLI_memblock_iter iter;
GPUTexture **tex;
- BLI_mempool_iternew(viewport->vmempool.images, &iter);
- while ((tex = BLI_mempool_iterstep(&iter))) {
+ BLI_memblock_iternew(viewport->vmempool.images, &iter);
+ while ((tex = BLI_memblock_iterstep(&iter))) {
GPU_texture_free(*tex);
}
- BLI_mempool_destroy(viewport->vmempool.images);
+ BLI_memblock_destroy(viewport->vmempool.images);
}
DRW_instance_data_list_free(viewport->idatalist);