Commit: be1891e895c012b36ca574a90b5d90fc1433152e Author: Germano Cavalcante Date: Mon Aug 23 13:28:55 2021 -0300 Branches: master https://developer.blender.org/rBbe1891e895c012b36ca574a90b5d90fc1433152e
Cleanup: move the buffer list to 'MeshBufferCache' The cache is used to fill the buffer list. =================================================================== M source/blender/draw/intern/draw_cache_extract.h M source/blender/draw/intern/draw_cache_extract_mesh.cc M source/blender/draw/intern/draw_cache_impl_mesh.c M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc =================================================================== diff --git a/source/blender/draw/intern/draw_cache_extract.h b/source/blender/draw/intern/draw_cache_extract.h index 855fef952d8..db96d6a774f 100644 --- a/source/blender/draw/intern/draw_cache_extract.h +++ b/source/blender/draw/intern/draw_cache_extract.h @@ -235,6 +235,8 @@ BLI_STATIC_ASSERT(MBC_BATCH_LEN < 32, "Number of batches exceeded the limit of b * - Loose geometry. */ typedef struct MeshBufferCache { + MeshBufferList buff; + struct { int edge_len; int vert_len; @@ -249,20 +251,15 @@ typedef struct MeshBufferCache { } poly_sorted; } MeshBufferCache; -#define FOREACH_MESH_BUFFER_CACHE(batch_cache, mbuflist) \ - for (MeshBufferList *mbuflist = &batch_cache->final; \ - mbuflist == &batch_cache->final || mbuflist == &batch_cache->cage || \ - mbuflist == &batch_cache->uv_cage; \ - mbuflist = (mbuflist == &batch_cache->final) ? \ - &batch_cache->cage : \ - ((mbuflist == &batch_cache->cage) ? &batch_cache->uv_cage : NULL)) +#define FOREACH_MESH_BUFFER_CACHE(batch_cache, mbc) \ + for (MeshBufferCache *mbc = &batch_cache->final; \ + mbc == &batch_cache->final || mbc == &batch_cache->cage || mbc == &batch_cache->uv_cage; \ + mbc = (mbc == &batch_cache->final) ? \ + &batch_cache->cage : \ + ((mbc == &batch_cache->cage) ? &batch_cache->uv_cage : NULL)) typedef struct MeshBatchCache { - MeshBufferList final, cage, uv_cage; - - MeshBufferCache final_extraction_cache; - MeshBufferCache cage_extraction_cache; - MeshBufferCache uv_cage_extraction_cache; + MeshBufferCache final, cage, uv_cage; MeshBatchList batch; @@ -307,8 +304,7 @@ typedef struct MeshBatchCache { MBC_EDITUV_EDGES | MBC_EDITUV_VERTS | MBC_EDITUV_FACEDOTS | MBC_WIRE_LOOPS_UVS) void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, - MeshBatchCache *cache, - MeshBufferList *mbuflist, + MeshBatchCache *mbc, MeshBufferCache *extraction_cache, Mesh *me, const bool is_editmode, diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc b/source/blender/draw/intern/draw_cache_extract_mesh.cc index 5bdcf615e22..06c449fe590 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh.cc +++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc @@ -565,8 +565,7 @@ static struct TaskNode *mesh_extract_render_data_node_create(struct TaskGraph *t static void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, MeshBatchCache *cache, - MeshBufferList *mbuflist, - MeshBufferCache *extraction_cache, + MeshBufferCache *mbc, Mesh *me, const bool is_editmode, @@ -617,6 +616,8 @@ static void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, /* Create an array containing all the extractors that needs to be executed. */ ExtractorRunDatas extractors; + MeshBufferList *mbuflist = &mbc->buff; + #define EXTRACT_ADD_REQUESTED(type, name) \ do { \ if (DRW_##type##_requested(mbuflist->type.name)) { \ @@ -705,7 +706,7 @@ static void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, eMRDataType data_flag = extractors.data_types(); struct TaskNode *task_node_mesh_render_data = mesh_extract_render_data_node_create( - task_graph, mr, extraction_cache, iter_type, data_flag); + task_graph, mr, mbc, iter_type, data_flag); /* Simple heuristic. */ const bool use_thread = (mr->loop_len + mr->loop_loose_len) > MIN_RANGE_LEN; @@ -779,8 +780,7 @@ static void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, extern "C" { void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, MeshBatchCache *cache, - MeshBufferList *mbuflist, - MeshBufferCache *extraction_cache, + MeshBufferCache *mbc, Mesh *me, const bool is_editmode, @@ -796,8 +796,7 @@ void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, { blender::draw::mesh_buffer_cache_create_requested(task_graph, cache, - mbuflist, - extraction_cache, + mbc, me, is_editmode, is_paint_mode, diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 6cf6e3bd0d8..18664498d00 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -688,8 +688,8 @@ static void mesh_batch_cache_check_vertex_group(MeshBatchCache *cache, const struct DRW_MeshWeightState *wstate) { if (!drw_mesh_weight_state_compare(&cache->weight_state, wstate)) { - FOREACH_MESH_BUFFER_CACHE (cache, mbufcache) { - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.weights); + FOREACH_MESH_BUFFER_CACHE (cache, mbc) { + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.weights); } GPU_BATCH_CLEAR_SAFE(cache->batch.surface_weights); @@ -722,11 +722,11 @@ static void mesh_batch_cache_discard_surface_batches(MeshBatchCache *cache) static void mesh_batch_cache_discard_shaded_tri(MeshBatchCache *cache) { - FOREACH_MESH_BUFFER_CACHE (cache, mbufcache) { - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.uv); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.tan); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.vcol); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.orco); + FOREACH_MESH_BUFFER_CACHE (cache, mbc) { + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.uv); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.tan); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.vcol); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.orco); } DRWBatchFlag batch_map = BATCH_MAP(vbo.uv, vbo.tan, vbo.vcol, vbo.orco); mesh_batch_cache_discard_batch(cache, batch_map); @@ -735,17 +735,17 @@ static void mesh_batch_cache_discard_shaded_tri(MeshBatchCache *cache) static void mesh_batch_cache_discard_uvedit(MeshBatchCache *cache) { - FOREACH_MESH_BUFFER_CACHE (cache, mbufcache) { - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edituv_stretch_angle); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edituv_stretch_area); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.uv); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edituv_data); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_uv); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_edituv_data); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_tris); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_lines); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_points); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_fdots); + FOREACH_MESH_BUFFER_CACHE (cache, mbc) { + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.edituv_stretch_angle); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.edituv_stretch_area); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.uv); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.edituv_data); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.fdots_uv); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.fdots_edituv_data); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_tris); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_lines); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_points); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_fdots); } DRWBatchFlag batch_map = BATCH_MAP(vbo.edituv_stretch_angle, vbo.edituv_stretch_area, @@ -771,13 +771,13 @@ static void mesh_batch_cache_discard_uvedit(MeshBatchCache *cache) static void mesh_batch_cache_discard_uvedit_select(MeshBatchCache *cache) { - FOREACH_MESH_BUFFER_CACHE (cache, mbufcache) { - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edituv_data); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_edituv_data); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_tris); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_lines); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_points); - GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_fdots); + FOREACH_MESH_BUFFER_CACHE (cache, mbc) { + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.edituv_data); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.fdots_edituv_data); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_tris); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_lines); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_points); + GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.edituv_fdots); } DRWBatchFlag batch_map = BATCH_MAP(vbo.edituv_data, vbo.fdots_edituv_data, @@ -797,9 +797,9 @@ void DRW_mesh_batch_cache_dirty_tag(Mesh *me, eMeshBatchDirtyMode mode) DRWBatchFlag batch_map; switch (mode) { case BKE_MESH_BATCH_DIRTY_SELECT: - FOREACH_MESH_BUFFER_CACHE (cache, mbufcache) { - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edit_data); - GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_nor); + FOREACH_MESH_BUFFER_CACHE (cache, mbc) { + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.edit_data); + GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.fdots_nor); } batch_map = BATCH_MAP(vbo.edit_data, vbo.fdots_nor); mesh_batch_cache_discard_batch(cache, batch_map); @@ -810,10 +810,10 @@ void DRW_mesh_batch_cache_dirty_tag(Mesh *me, eMeshBatchDirtyMode mode) case B @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs