[Bf-blender-cvs] [cbe4036406e] master: Cleanup: Isolate the batch list struct into a struct called MeshBatchList

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


Commit: cbe4036406ed21d5659b266dddbbe03a1a945721
Author: Germano Cavalcante
Date:   Mon Aug 23 12:46:14 2021 -0300
Branches: master
https://developer.blender.org/rBcbe4036406ed21d5659b266dddbbe03a1a945721

Cleanup: Isolate the batch list struct into a struct called MeshBatchList

This allows for a simplification of macros and combines with
`MeshBufferList`.

===================================================================

M	source/blender/draw/intern/draw_cache_extract.h
M	source/blender/draw/intern/draw_cache_impl_mesh.c

===================================================================

diff --git a/source/blender/draw/intern/draw_cache_extract.h b/source/blender/draw/intern/draw_cache_extract.h
index 0d730058ba4..855fef952d8 100644
--- a/source/blender/draw/intern/draw_cache_extract.h
+++ b/source/blender/draw/intern/draw_cache_extract.h
@@ -154,6 +154,81 @@ typedef struct MeshBufferList {
   } ibo;
 } MeshBufferList;
 
+typedef struct MeshBatchList {
+  /* Surfaces / Render */
+  GPUBatch *surface;
+  GPUBatch *surface_weights;
+  /* Edit mode */
+  GPUBatch *edit_triangles;
+  GPUBatch *edit_vertices;
+  GPUBatch *edit_edges;
+  GPUBatch *edit_vnor;
+  GPUBatch *edit_lnor;
+  GPUBatch *edit_fdots;
+  GPUBatch *edit_mesh_analysis;
+  GPUBatch *edit_skin_roots;
+  /* Edit UVs */
+  GPUBatch *edituv_faces_stretch_area;
+  GPUBatch *edituv_faces_stretch_angle;
+  GPUBatch *edituv_faces;
+  GPUBatch *edituv_edges;
+  GPUBatch *edituv_verts;
+  GPUBatch *edituv_fdots;
+  /* Edit selection */
+  GPUBatch *edit_selection_verts;
+  GPUBatch *edit_selection_edges;
+  GPUBatch *edit_selection_faces;
+  GPUBatch *edit_selection_fdots;
+  /* Common display / Other */
+  GPUBatch *all_verts;
+  GPUBatch *all_edges;
+  GPUBatch *loose_edges;
+  GPUBatch *edge_detection;
+  GPUBatch *wire_edges;     /* Individual edges with face normals. */
+  GPUBatch *wire_loops;     /* Loops around faces. no edges between selected faces */
+  GPUBatch *wire_loops_uvs; /* Same as wire_loops but only has uvs. */
+  GPUBatch *sculpt_overlays;
+} MeshBatchList;
+
+#define MBC_BATCH_LEN (sizeof(MeshBatchList) / sizeof(void *))
+#define MBC_VBO_LEN (sizeof(((MeshBufferList){0}).vbo) / sizeof(void *))
+#define MBC_IBO_LEN (sizeof(((MeshBufferList){0}).ibo) / sizeof(void *))
+
+#define MBC_BATCH_INDEX(batch) (offsetof(MeshBatchList, batch) / sizeof(void *))
+
+typedef enum DRWBatchFlag {
+  MBC_SURFACE = (1u << MBC_BATCH_INDEX(surface)),
+  MBC_SURFACE_WEIGHTS = (1u << MBC_BATCH_INDEX(surface_weights)),
+  MBC_EDIT_TRIANGLES = (1u << MBC_BATCH_INDEX(edit_triangles)),
+  MBC_EDIT_VERTICES = (1u << MBC_BATCH_INDEX(edit_vertices)),
+  MBC_EDIT_EDGES = (1u << MBC_BATCH_INDEX(edit_edges)),
+  MBC_EDIT_VNOR = (1u << MBC_BATCH_INDEX(edit_vnor)),
+  MBC_EDIT_LNOR = (1u << MBC_BATCH_INDEX(edit_lnor)),
+  MBC_EDIT_FACEDOTS = (1u << MBC_BATCH_INDEX(edit_fdots)),
+  MBC_EDIT_MESH_ANALYSIS = (1u << MBC_BATCH_INDEX(edit_mesh_analysis)),
+  MBC_SKIN_ROOTS = (1u << MBC_BATCH_INDEX(edit_skin_roots)),
+  MBC_EDITUV_FACES_STRETCH_AREA = (1u << MBC_BATCH_INDEX(edituv_faces_stretch_area)),
+  MBC_EDITUV_FACES_STRETCH_ANGLE = (1u << MBC_BATCH_INDEX(edituv_faces_stretch_angle)),
+  MBC_EDITUV_FACES = (1u << MBC_BATCH_INDEX(edituv_faces)),
+  MBC_EDITUV_EDGES = (1u << MBC_BATCH_INDEX(edituv_edges)),
+  MBC_EDITUV_VERTS = (1u << MBC_BATCH_INDEX(edituv_verts)),
+  MBC_EDITUV_FACEDOTS = (1u << MBC_BATCH_INDEX(edituv_fdots)),
+  MBC_EDIT_SELECTION_VERTS = (1u << MBC_BATCH_INDEX(edit_selection_verts)),
+  MBC_EDIT_SELECTION_EDGES = (1u << MBC_BATCH_INDEX(edit_selection_edges)),
+  MBC_EDIT_SELECTION_FACES = (1u << MBC_BATCH_INDEX(edit_selection_faces)),
+  MBC_EDIT_SELECTION_FACEDOTS = (1u << MBC_BATCH_INDEX(edit_selection_fdots)),
+  MBC_ALL_VERTS = (1u << MBC_BATCH_INDEX(all_verts)),
+  MBC_ALL_EDGES = (1u << MBC_BATCH_INDEX(all_edges)),
+  MBC_LOOSE_EDGES = (1u << MBC_BATCH_INDEX(loose_edges)),
+  MBC_EDGE_DETECTION = (1u << MBC_BATCH_INDEX(edge_detection)),
+  MBC_WIRE_EDGES = (1u << MBC_BATCH_INDEX(wire_edges)),
+  MBC_WIRE_LOOPS = (1u << MBC_BATCH_INDEX(wire_loops)),
+  MBC_WIRE_LOOPS_UVS = (1u << MBC_BATCH_INDEX(wire_loops_uvs)),
+  MBC_SCULPT_OVERLAYS = (1u << MBC_BATCH_INDEX(sculpt_overlays)),
+} DRWBatchFlag;
+
+BLI_STATIC_ASSERT(MBC_BATCH_LEN < 32, "Number of batches exceeded the limit of bit fields");
+
 /**
  * Data that are kept around between extractions to reduce rebuilding time.
  *
@@ -189,49 +264,15 @@ typedef struct MeshBatchCache {
   MeshBufferCache cage_extraction_cache;
   MeshBufferCache uv_cage_extraction_cache;
 
-  struct {
-    /* Surfaces / Render */
-    GPUBatch *surface;
-    GPUBatch *surface_weights;
-    /* Edit mode */
-    GPUBatch *edit_triangles;
-    GPUBatch *edit_vertices;
-    GPUBatch *edit_edges;
-    GPUBatch *edit_vnor;
-    GPUBatch *edit_lnor;
-    GPUBatch *edit_fdots;
-    GPUBatch *edit_mesh_analysis;
-    GPUBatch *edit_skin_roots;
-    /* Edit UVs */
-    GPUBatch *edituv_faces_stretch_area;
-    GPUBatch *edituv_faces_stretch_angle;
-    GPUBatch *edituv_faces;
-    GPUBatch *edituv_edges;
-    GPUBatch *edituv_verts;
-    GPUBatch *edituv_fdots;
-    /* Edit selection */
-    GPUBatch *edit_selection_verts;
-    GPUBatch *edit_selection_edges;
-    GPUBatch *edit_selection_faces;
-    GPUBatch *edit_selection_fdots;
-    /* Common display / Other */
-    GPUBatch *all_verts;
-    GPUBatch *all_edges;
-    GPUBatch *loose_edges;
-    GPUBatch *edge_detection;
-    GPUBatch *wire_edges;     /* Individual edges with face normals. */
-    GPUBatch *wire_loops;     /* Loops around faces. no edges between selected faces */
-    GPUBatch *wire_loops_uvs; /* Same as wire_loops but only has uvs. */
-    GPUBatch *sculpt_overlays;
-  } batch;
+  MeshBatchList batch;
 
   /* Index buffer per material. These are subranges of `ibo.tris` */
   GPUIndexBuf **tris_per_mat;
 
   GPUBatch **surface_per_mat;
 
-  uint32_t batch_requested; /* DRWBatchFlag */
-  uint32_t batch_ready;     /* DRWBatchFlag */
+  DRWBatchFlag batch_requested; /* DRWBatchFlag */
+  DRWBatchFlag batch_ready;     /* DRWBatchFlag */
 
   /* settings to determine if cache is invalid */
   int edge_len;
@@ -261,47 +302,6 @@ typedef struct MeshBatchCache {
   bool no_loose_wire;
 } MeshBatchCache;
 
-#define MBC_BATCH_LEN (sizeof(((MeshBatchCache){0}).batch) / sizeof(void *))
-#define MBC_VBO_LEN (sizeof(((MeshBufferList){0}).vbo) / sizeof(void *))
-#define MBC_IBO_LEN (sizeof(((MeshBufferList){0}).ibo) / sizeof(void *))
-
-#define MBC_BATCH_INDEX(batch_name) \
-  ((offsetof(MeshBatchCache, batch_name) - offsetof(MeshBatchCache, batch)) / sizeof(void *))
-
-typedef enum DRWBatchFlag {
-  MBC_SURFACE = (1u << MBC_BATCH_INDEX(batch.surface)),
-  MBC_SURFACE_WEIGHTS = (1u << MBC_BATCH_INDEX(batch.surface_weights)),
-  MBC_EDIT_TRIANGLES = (1u << MBC_BATCH_INDEX(batch.edit_triangles)),
-  MBC_EDIT_VERTICES = (1u << MBC_BATCH_INDEX(batch.edit_vertices)),
-  MBC_EDIT_EDGES = (1u << MBC_BATCH_INDEX(batch.edit_edges)),
-  MBC_EDIT_VNOR = (1u << MBC_BATCH_INDEX(batch.edit_vnor)),
-  MBC_EDIT_LNOR = (1u << MBC_BATCH_INDEX(batch.edit_lnor)),
-  MBC_EDIT_FACEDOTS = (1u << MBC_BATCH_INDEX(batch.edit_fdots)),
-  MBC_EDIT_MESH_ANALYSIS = (1u << MBC_BATCH_INDEX(batch.edit_mesh_analysis)),
-  MBC_SKIN_ROOTS = (1u << MBC_BATCH_INDEX(batch.edit_skin_roots)),
-  MBC_EDITUV_FACES_STRETCH_AREA = (1u << MBC_BATCH_INDEX(batch.edituv_faces_stretch_area)),
-  MBC_EDITUV_FACES_STRETCH_ANGLE = (1u << MBC_BATCH_INDEX(batch.edituv_faces_stretch_angle)),
-  MBC_EDITUV_FACES = (1u << MBC_BATCH_INDEX(batch.edituv_faces)),
-  MBC_EDITUV_EDGES = (1u << MBC_BATCH_INDEX(batch.edituv_edges)),
-  MBC_EDITUV_VERTS = (1u << MBC_BATCH_INDEX(batch.edituv_verts)),
-  MBC_EDITUV_FACEDOTS = (1u << MBC_BATCH_INDEX(batch.edituv_fdots)),
-  MBC_EDIT_SELECTION_VERTS = (1u << MBC_BATCH_INDEX(batch.edit_selection_verts)),
-  MBC_EDIT_SELECTION_EDGES = (1u << MBC_BATCH_INDEX(batch.edit_selection_edges)),
-  MBC_EDIT_SELECTION_FACES = (1u << MBC_BATCH_INDEX(batch.edit_selection_faces)),
-  MBC_EDIT_SELECTION_FACEDOTS = (1u << MBC_BATCH_INDEX(batch.edit_selection_fdots)),
-  MBC_ALL_VERTS = (1u << MBC_BATCH_INDEX(batch.all_verts)),
-  MBC_ALL_EDGES = (1u << MBC_BATCH_INDEX(batch.all_edges)),
-  MBC_LOOSE_EDGES = (1u << MBC_BATCH_INDEX(batch.loose_edges)),
-  MBC_EDGE_DETECTION = (1u << MBC_BATCH_INDEX(batch.edge_detection)),
-  MBC_WIRE_EDGES = (1u << MBC_BATCH_INDEX(batch.wire_edges)),
-  MBC_WIRE_LOOPS = (1u << MBC_BATCH_INDEX(batch.wire_loops)),
-  MBC_WIRE_LOOPS_UVS = (1u << MBC_BATCH_INDEX(batch.wire_loops_uvs)),
-  MBC_SCULPT_OVERLAYS = (1u << MBC_BATCH_INDEX(batch.sculpt_overlays)),
-} DRWBatchFlag;
-
-BLI_STATIC_ASSERT(MBC_BATCH_INDEX(surface_per_mat) < 32,
-                  "Number of batches exceeded the limit of bit fields");
-
 #define MBC_EDITUV \
   (MBC_EDITUV_FACES_STRETCH_AREA | MBC_EDITUV_FACES_STRETCH_ANGLE | MBC_EDITUV_FACES | \
    MBC_EDITUV_EDGES | MBC_EDITUV_VERTS | MBC_EDITUV_FACEDOTS | MBC_WIRE_LOOPS_UVS)
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index d3a1b09ba9d..6cf6e3bd0d8 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -140,81 +140,78 @@
 #define SURFACE_PER_MAT_FLAG (1u << MBC_BATCH_LEN)
 
 static const DRWBatchFlag g_buffer_deps[] = {
-    [BUFFER_INDEX(vbo.pos_nor)] = BATCH_FLAG(batch.surface,
-                                             batch.surface_weights,
-                                             batch.edit_triangles,
-                                             batch.edit_vertices,
-                                             batch.edit_edges,
-                                             batch.edit_vnor,
-                                             batch.edit_lnor,
-                                             batch.edit_mesh_analysis,
-                                             batch.edit_selection_verts,
-                                             batch.edit_selection_edges,
-                                             batch.edit_selection_faces,
-                                             batch.all_verts,
-                                             batch.all_edges,
-                                             batch.loose_edges,
-                                             batch.edge_detection,
-                                             batch.wire_edges,
-                                             batch.wire_loops,
-                                             batch.sculpt_overlays) |
+    [BUFFER_INDEX(vbo.pos_nor)] = BATCH_FLAG(surface,
+                                             surface_weights,
+                                             edit_triangles,
+                                             edit_vertices,
+  

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list