[Bf-blender-cvs] [7ffff04e490] master: GPUVertBuf: Make GPUVertBuf private to the GPU module

Clément Foucault noreply at git.blender.org
Sun Sep 6 22:15:36 CEST 2020


Commit: 7ffff04e4900ca284519900d12bd1490e218c4f4
Author: Clément Foucault
Date:   Sun Sep 6 16:40:07 2020 +0200
Branches: master
https://developer.blender.org/rB7ffff04e4900ca284519900d12bd1490e218c4f4

GPUVertBuf: Make GPUVertBuf private to the GPU module

This is just a cleanup to isolate the internals of the vertbuf.
This adds some getters to avoid refactor of existing code.

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

M	source/blender/draw/engines/eevee/eevee_motion_blur.c
M	source/blender/draw/engines/overlay/overlay_motion_path.c
M	source/blender/draw/intern/draw_cache_extract_mesh.c
M	source/blender/draw/intern/draw_cache_impl_displist.c
M	source/blender/draw/intern/draw_cache_impl_gpencil.c
M	source/blender/draw/intern/draw_cache_impl_pointcloud.c
M	source/blender/draw/intern/draw_cache_inline.h
M	source/blender/draw/intern/draw_instance_data.c
M	source/blender/draw/intern/draw_manager_data.c
M	source/blender/draw/intern/draw_manager_exec.c
M	source/blender/gpu/CMakeLists.txt
M	source/blender/gpu/GPU_vertex_buffer.h
M	source/blender/gpu/intern/gpu_batch.cc
M	source/blender/gpu/intern/gpu_buffers.c
M	source/blender/gpu/intern/gpu_immediate.cc
M	source/blender/gpu/intern/gpu_shader_private.hh
M	source/blender/gpu/intern/gpu_texture.cc
M	source/blender/gpu/intern/gpu_vertex_buffer.cc
A	source/blender/gpu/intern/gpu_vertex_buffer_private.hh
M	source/blender/gpu/opengl/gl_drawlist.cc
M	source/blender/gpu/opengl/gl_texture.cc
M	source/blender/gpu/opengl/gl_vertex_array.cc
M	source/blender/python/gpu/gpu_py_batch.c
M	source/blender/python/gpu/gpu_py_vertex_buffer.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_motion_blur.c b/source/blender/draw/engines/eevee/eevee_motion_blur.c
index e10c627494a..c84d1ba33ea 100644
--- a/source/blender/draw/engines/eevee/eevee_motion_blur.c
+++ b/source/blender/draw/engines/eevee/eevee_motion_blur.c
@@ -480,7 +480,7 @@ void EEVEE_motion_blur_cache_finish(EEVEE_Data *vedata)
           for (int i = 0; i < MB_CURR; i++) {
             GPUVertBuf *vbo = mb_geom->vbo[i];
             if (vbo && batch) {
-              if (vbo->vertex_len != batch->verts[0]->vertex_len) {
+              if (GPU_vertbuf_get_vertex_len(vbo) != GPU_vertbuf_get_vertex_len(batch->verts[0])) {
                 /* Vertex count mismatch, disable deform motion blur. */
                 mb_geom->use_deform = false;
               }
@@ -506,9 +506,9 @@ void EEVEE_motion_blur_cache_finish(EEVEE_Data *vedata)
             /* Perform a copy to avoid loosing it after RE_engine_frame_set(). */
             mb_geom->vbo[mb_step] = vbo = GPU_vertbuf_duplicate(vbo);
             /* Find and replace "pos" attrib name. */
-            int attrib_id = GPU_vertformat_attr_id_get(&vbo->format, "pos");
-            GPU_vertformat_attr_rename(
-                &vbo->format, attrib_id, (mb_step == MB_PREV) ? "prv" : "nxt");
+            GPUVertFormat *format = (GPUVertFormat *)GPU_vertbuf_get_format(vbo);
+            int attrib_id = GPU_vertformat_attr_id_get(format, "pos");
+            GPU_vertformat_attr_rename(format, attrib_id, (mb_step == MB_PREV) ? "prv" : "nxt");
           }
         }
         break;
@@ -573,8 +573,9 @@ void EEVEE_motion_blur_swap_data(EEVEE_Data *vedata)
 
         if (mb_geom->vbo[MB_NEXT]) {
           GPUVertBuf *vbo = mb_geom->vbo[MB_NEXT];
-          int attrib_id = GPU_vertformat_attr_id_get(&vbo->format, "nxt");
-          GPU_vertformat_attr_rename(&vbo->format, attrib_id, "prv");
+          GPUVertFormat *format = (GPUVertFormat *)GPU_vertbuf_get_format(vbo);
+          int attrib_id = GPU_vertformat_attr_id_get(format, "nxt");
+          GPU_vertformat_attr_rename(format, attrib_id, "prv");
         }
         break;
 
diff --git a/source/blender/draw/engines/overlay/overlay_motion_path.c b/source/blender/draw/engines/overlay/overlay_motion_path.c
index 0e5a52702fe..48b7b53a5ba 100644
--- a/source/blender/draw/engines/overlay/overlay_motion_path.c
+++ b/source/blender/draw/engines/overlay/overlay_motion_path.c
@@ -68,7 +68,9 @@ static GPUVertBuf *mpath_vbo_get(bMotionPath *mpath)
     mpath->points_vbo = GPU_vertbuf_create_with_format(&format);
     GPU_vertbuf_data_alloc(mpath->points_vbo, mpath->length);
     /* meh... a useless memcpy. */
-    memcpy(mpath->points_vbo->data, mpath->points, sizeof(bMotionPathVert) * mpath->length);
+    memcpy(GPU_vertbuf_get_data(mpath->points_vbo),
+           mpath->points,
+           sizeof(bMotionPathVert) * mpath->length);
   }
   return mpath->points_vbo;
 }
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c b/source/blender/draw/intern/draw_cache_extract_mesh.c
index 528a6eec69e..9f4ae8fbfbf 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.c
@@ -1923,7 +1923,7 @@ static void *extract_pos_nor_init(const MeshRenderData *mr,
   /* Pack normals per vert, reduce amount of computation. */
   size_t packed_nor_len = sizeof(GPUPackedNormal) * mr->vert_len;
   MeshExtract_PosNor_Data *data = MEM_mallocN(sizeof(*data) + packed_nor_len, __func__);
-  data->vbo_data = (PosNorLoop *)vbo->data;
+  data->vbo_data = (PosNorLoop *)GPU_vertbuf_get_data(vbo);
 
   /* Quicker than doing it for each loop. */
   if (mr->extract_type == MR_EXTRACT_BMESH) {
@@ -2096,7 +2096,7 @@ static void *extract_lnor_hq_init(const MeshRenderData *mr,
   GPU_vertbuf_init_with_format(vbo, &format);
   GPU_vertbuf_data_alloc(vbo, mr->loop_len);
 
-  return vbo->data;
+  return GPU_vertbuf_get_data(vbo);
 }
 
 static void extract_lnor_hq_iter_poly_bm(const MeshRenderData *mr,
@@ -2184,7 +2184,7 @@ static void *extract_lnor_init(const MeshRenderData *mr,
   GPU_vertbuf_init_with_format(vbo, &format);
   GPU_vertbuf_data_alloc(vbo, mr->loop_len);
 
-  return vbo->data;
+  return GPU_vertbuf_get_data(vbo);
 }
 
 static void extract_lnor_iter_poly_bm(const MeshRenderData *mr,
@@ -2319,7 +2319,7 @@ static void *extract_uv_init(const MeshRenderData *mr, struct MeshBatchCache *ca
   GPU_vertbuf_init_with_format(vbo, &format);
   GPU_vertbuf_data_alloc(vbo, v_len);
 
-  float(*uv_data)[2] = (float(*)[2])vbo->data;
+  float(*uv_data)[2] = (float(*)[2])GPU_vertbuf_get_data(vbo);
   for (int i = 0; i < MAX_MTFACE; i++) {
     if (uv_layers & (1 << i)) {
       if (mr->extract_type == MR_EXTRACT_BMESH) {
@@ -2487,7 +2487,7 @@ static void extract_tan_ex(const MeshRenderData *mr,
   GPU_vertbuf_data_alloc(vbo, v_len);
 
   if (do_hq) {
-    short(*tan_data)[4] = (short(*)[4])vbo->data;
+    short(*tan_data)[4] = (short(*)[4])GPU_vertbuf_get_data(vbo);
     for (int i = 0; i < tan_len; i++) {
       const char *name = tangent_names[i];
       float(*layer_data)[4] = (float(*)[4])CustomData_get_layer_named(
@@ -2508,7 +2508,7 @@ static void extract_tan_ex(const MeshRenderData *mr,
     }
   }
   else {
-    GPUPackedNormal *tan_data = (GPUPackedNormal *)vbo->data;
+    GPUPackedNormal *tan_data = (GPUPackedNormal *)GPU_vertbuf_get_data(vbo);
     for (int i = 0; i < tan_len; i++) {
       const char *name = tangent_names[i];
       float(*layer_data)[4] = (float(*)[4])CustomData_get_layer_named(
@@ -2639,7 +2639,7 @@ static void *extract_vcol_init(const MeshRenderData *mr, struct MeshBatchCache *
     ushort r, g, b, a;
   } gpuMeshVcol;
 
-  gpuMeshVcol *vcol_data = (gpuMeshVcol *)vbo->data;
+  gpuMeshVcol *vcol_data = (gpuMeshVcol *)GPU_vertbuf_get_data(vbo);
   MLoop *loops = CustomData_get_layer(cd_ldata, CD_MLOOP);
 
   for (int i = 0; i < MAX_MCOL; i++) {
@@ -2743,7 +2743,7 @@ static void *extract_orco_init(const MeshRenderData *mr,
   CustomData *cd_vdata = &mr->me->vdata;
 
   MeshExtract_Orco_Data *data = MEM_mallocN(sizeof(*data), __func__);
-  data->vbo_data = (float(*)[4])vbo->data;
+  data->vbo_data = (float(*)[4])GPU_vertbuf_get_data(vbo);
   data->orco = CustomData_get_layer(cd_vdata, CD_ORCO);
   /* Make sure `orco` layer was requested only if needed! */
   BLI_assert(data->orco);
@@ -2859,7 +2859,7 @@ static void *extract_edge_fac_init(const MeshRenderData *mr,
     data->use_edge_render = true;
   }
 
-  data->vbo_data = vbo->data;
+  data->vbo_data = GPU_vertbuf_get_data(vbo);
   return data;
 }
 
@@ -2969,14 +2969,14 @@ static void extract_edge_fac_finish(const MeshRenderData *mr,
       GPU_vertformat_attr_add(&format, "wd", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
     }
     /* We keep the data reference in data->vbo_data. */
-    vbo->data = NULL;
+    data->vbo_data = GPU_vertbuf_steal_data(vbo);
     GPU_vertbuf_clear(vbo);
 
     int buf_len = mr->loop_len + mr->loop_loose_len;
     GPU_vertbuf_init_with_format(vbo, &format);
     GPU_vertbuf_data_alloc(vbo, buf_len);
 
-    float *fdata = (float *)vbo->data;
+    float *fdata = (float *)GPU_vertbuf_get_data(vbo);
     for (int ml_index = 0; ml_index < buf_len; ml_index++, fdata++) {
       *fdata = data->vbo_data[ml_index] / 255.0f;
     }
@@ -3075,7 +3075,7 @@ static void *extract_weights_init(const MeshRenderData *mr,
   GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
 
   MeshExtract_Weight_Data *data = MEM_callocN(sizeof(*data), __func__);
-  data->vbo_data = (float *)vbo->data;
+  data->vbo_data = (float *)GPU_vertbuf_get_data(vbo);
   data->wstate = &cache->weight_state;
 
   if (data->wstate->defgroup_active == -1) {
@@ -3313,7 +3313,7 @@ static void *extract_edit_data_init(const MeshRenderData *mr,
   GPUVertBuf *vbo = buf;
   GPU_vertbuf_init_with_format(vbo, &format);
   GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
-  return vbo->data;
+  return GPU_vertbuf_get_data(vbo);
 }
 
 static void extract_edit_data_iter_poly_bm(const MeshRenderData *mr,
@@ -3471,7 +3471,7 @@ static void *extract_edituv_data_init(const MeshRenderData *mr,
   CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->ldata : &mr->me->ldata;
 
   MeshExtract_EditUVData_Data *data = MEM_callocN(sizeof(*data), __func__);
-  data->vbo_data = (EditLoopData *)vbo->data;
+  data->vbo_data = (EditLoopData *)GPU_vertbuf_get_data(vbo);
   data->cd_ofs = CustomData_get_offset(cd_ldata, CD_MLOOPUV);
   return data;
 }
@@ -3635,7 +3635,7 @@ static void mesh_stretch_area_finish(const MeshRenderData *mr,
 
   /* Copy face data for each loop. */
   GPUVertBuf *vbo = buf;
-  uint16_t *loop_stretch = (uint16_t *)vbo->data;
+  uint16_t *loop_stretch = (uint16_t *)GPU_vertbuf_get_data(vbo);
 
   if (mr->extract_type == MR_EXTRACT_BMESH) {
     BMFace *efa;
@@ -3746,7 +3746,7 @@ static void *extract_stretch_angle_init(const MeshRenderData *mr,
   GPU_vertbuf_data_alloc(vbo, mr->loop_len);
 
   MeshExtract_StretchAngle_Data *data = MEM_callocN(sizeof(*data), __func__);
-  data->vbo_data = (UVStretchAngle *)vbo->data;
+  data->vbo_data = (UVStretchAngle *)GPU_vertbuf_get_data(vbo);
 
   /* Special iterator needed to save about half of the computing cost. */
   if (mr->extract_type == MR_EXTRACT_BMESH) {
@@ -4446,7 +4446,7 @@ static void extract_mesh_analysis_finish(const MeshRenderData *mr,
   BLI_assert(mr->edit_bmesh);
 
   GPUVertBuf *vbo = buf;
-  float *l_weight = (float *)vbo->data;
+  float *l_weight = (float *)GPU_vertbuf_get_data(vbo);
 
   switch (mr->toolsettings->statvis.type) {
     case SCE_STATVIS_OVERHANG:
@@ -4493,7 +4493,7 @@ static void *extract_fdots_pos_init(const MeshRenderData *mr,
   GPUVertBuf *vbo = buf;
   GPU_vertbuf_init_with_format(vbo, &format);
   GPU_vertbuf_data_alloc(vbo, mr->poly_len);
-  return vbo->data;
+  return GPU_vertbuf_get_data(vbo);
 }
 
 static void extract_fdots_pos_iter_poly_bm(const MeshRenderData *mr,
@@ -4592,7 +4592,7 @@ static void extract_fdots_nor_finish(const MeshRenderData *mr,
 {
   static float invalid_normal[3] = {0.0f, 0.0f, 0.0f};
   GPUVertBuf *vbo = buf;
-  GPUPackedNormal *nor = (GPUPackedNormal *)vbo->data;
+  GPUPackedNormal *nor = (GPUPackedNormal *)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list