[Bf-blender-cvs] [be1891e895c] master: Cleanup: move the buffer list to 'MeshBufferCache'

Germano Cavalcante noreply at git.blender.org
Mon Aug 23 19:05:12 CEST 2021


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. @@



More information about the Bf-blender-cvs mailing list