[Bf-blender-cvs] [2d122e1dd9d] temp-T88822-gpu-thread-safe-index-builder: Merge branch 'master' into temp-T88822-gpu-thread-safe-index-builder

Jeroen Bakker noreply at git.blender.org
Mon Jun 7 11:58:52 CEST 2021


Commit: 2d122e1dd9d15c562647bc98fae408bd09d200f5
Author: Jeroen Bakker
Date:   Mon Jun 7 08:13:12 2021 +0200
Branches: temp-T88822-gpu-thread-safe-index-builder
https://developer.blender.org/rB2d122e1dd9d15c562647bc98fae408bd09d200f5

Merge branch 'master' into temp-T88822-gpu-thread-safe-index-builder

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



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

diff --cc source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
index 5c667bd0ca3,0a3945291bb..c8ab16b0689
--- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
@@@ -433,6 -413,158 +421,29 @@@ const MeshExtract extract_lines_with_li
  /** \} */
  
  /* ---------------------------------------------------------------------- */
+ /** \name Extract Loose Edges Sub Buffer
+  * \{ */
+ 
+ static void *extract_lines_loose_only_init(const MeshRenderData *mr,
+                                            struct MeshBatchCache *cache,
 -                                           void *buf)
++                                           void *buf,
++                                           const uint UNUSED(task_len))
+ {
+   BLI_assert(buf == cache->final.ibo.lines_loose);
+   UNUSED_VARS_NDEBUG(buf);
+   extract_lines_loose_subbuffer(mr, cache);
+   return NULL;
+ }
+ 
+ const MeshExtract extract_lines_loose_only = {
+     .init = extract_lines_loose_only_init,
+     .data_type = 0,
+     .use_threading = false,
+     .mesh_buffer_offset = offsetof(MeshBufferCache, ibo.lines_loose)};
+ 
+ /** \} */
+ 
 -/* ---------------------------------------------------------------------- */
 -/** \name Extract Point Indices
 - * \{ */
 -
 -static void *extract_points_init(const MeshRenderData *mr,
 -                                 struct MeshBatchCache *UNUSED(cache),
 -                                 void *UNUSED(buf))
 -{
 -  GPUIndexBufBuilder *elb = MEM_mallocN(sizeof(*elb), __func__);
 -  GPU_indexbuf_init(elb, GPU_PRIM_POINTS, mr->vert_len, mr->loop_len + mr->loop_loose_len);
 -  return elb;
 -}
 -
 -BLI_INLINE void vert_set_bm(GPUIndexBufBuilder *elb, BMVert *eve, int l_index)
 -{
 -  const int v_index = BM_elem_index_get(eve);
 -  if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
 -    GPU_indexbuf_set_point_vert(elb, v_index, l_index);
 -  }
 -  else {
 -    GPU_indexbuf_set_point_restart(elb, v_index);
 -  }
 -}
 -
 -BLI_INLINE void vert_set_mesh(GPUIndexBufBuilder *elb,
 -                              const MeshRenderData *mr,
 -                              const int v_index,
 -                              const int l_index)
 -{
 -  const MVert *mv = &mr->mvert[v_index];
 -  if (!((mr->use_hide && (mv->flag & ME_HIDE)) ||
 -        ((mr->extract_type == MR_EXTRACT_MAPPED) && (mr->v_origindex) &&
 -         (mr->v_origindex[v_index] == ORIGINDEX_NONE)))) {
 -    GPU_indexbuf_set_point_vert(elb, v_index, l_index);
 -  }
 -  else {
 -    GPU_indexbuf_set_point_restart(elb, v_index);
 -  }
 -}
 -
 -static void extract_points_iter_poly_bm(const MeshRenderData *UNUSED(mr),
 -                                        BMFace *f,
 -                                        const int UNUSED(f_index),
 -                                        void *elb)
 -{
 -  BMLoop *l_iter, *l_first;
 -  l_iter = l_first = BM_FACE_FIRST_LOOP(f);
 -  do {
 -    const int l_index = BM_elem_index_get(l_iter);
 -
 -    vert_set_bm(elb, l_iter->v, l_index);
 -  } while ((l_iter = l_iter->next) != l_first);
 -}
 -
 -static void extract_points_iter_poly_mesh(const MeshRenderData *mr,
 -                                          const MPoly *mp,
 -                                          const int UNUSED(mp_index),
 -                                          void *elb)
 -{
 -  const MLoop *mloop = mr->mloop;
 -  const int ml_index_end = mp->loopstart + mp->totloop;
 -  for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) {
 -    const MLoop *ml = &mloop[ml_index];
 -    vert_set_mesh(elb, mr, ml->v, ml_index);
 -  }
 -}
 -
 -static void extract_points_iter_ledge_bm(const MeshRenderData *mr,
 -                                         BMEdge *eed,
 -                                         const int ledge_index,
 -                                         void *elb)
 -{
 -  vert_set_bm(elb, eed->v1, mr->loop_len + (ledge_index * 2));
 -  vert_set_bm(elb, eed->v2, mr->loop_len + (ledge_index * 2) + 1);
 -}
 -
 -static void extract_points_iter_ledge_mesh(const MeshRenderData *mr,
 -                                           const MEdge *med,
 -                                           const uint ledge_index,
 -                                           void *elb)
 -{
 -  vert_set_mesh(elb, mr, med->v1, mr->loop_len + (ledge_index * 2));
 -  vert_set_mesh(elb, mr, med->v2, mr->loop_len + (ledge_index * 2) + 1);
 -}
 -
 -static void extract_points_iter_lvert_bm(const MeshRenderData *mr,
 -                                         BMVert *eve,
 -                                         const int lvert_index,
 -                                         void *elb)
 -{
 -  const int offset = mr->loop_len + (mr->edge_loose_len * 2);
 -  vert_set_bm(elb, eve, offset + lvert_index);
 -}
 -
 -static void extract_points_iter_lvert_mesh(const MeshRenderData *mr,
 -                                           const MVert *UNUSED(mv),
 -                                           const int lvert_index,
 -                                           void *elb)
 -{
 -  const int offset = mr->loop_len + (mr->edge_loose_len * 2);
 -
 -  vert_set_mesh(elb, mr, mr->lverts[lvert_index], offset + lvert_index);
 -}
 -
 -static void extract_points_finish(const MeshRenderData *UNUSED(mr),
 -                                  struct MeshBatchCache *UNUSED(cache),
 -                                  void *buf,
 -                                  void *elb)
 -{
 -  GPUIndexBuf *ibo = buf;
 -  GPU_indexbuf_build_in_place(elb, ibo);
 -  MEM_freeN(elb);
 -}
 -
 -const MeshExtract extract_points = {
 -    .init = extract_points_init,
 -    .iter_poly_bm = extract_points_iter_poly_bm,
 -    .iter_poly_mesh = extract_points_iter_poly_mesh,
 -    .iter_ledge_bm = extract_points_iter_ledge_bm,
 -    .iter_ledge_mesh = extract_points_iter_ledge_mesh,
 -    .iter_lvert_bm = extract_points_iter_lvert_bm,
 -    .iter_lvert_mesh = extract_points_iter_lvert_mesh,
 -    .finish = extract_points_finish,
 -    .data_type = 0,
 -    .use_threading = false,
 -    .mesh_buffer_offset = offsetof(MeshBufferCache, ibo.points),
 -};
 -
 -/** \} */
 -
+ /* ---------------------------------------------------------------------- */
  /** \name Extract Face-dots Indices
   * \{ */



More information about the Bf-blender-cvs mailing list