[Bf-blender-cvs] [6d93f032e32] cycles_procedural_api: remove update flags changes

Kévin Dietrich noreply at git.blender.org
Thu Nov 5 18:57:52 CET 2020


Commit: 6d93f032e32dc3fc57a093fc5e12e8677ef66ad2
Author: Kévin Dietrich
Date:   Mon Nov 2 00:53:07 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB6d93f032e32dc3fc57a093fc5e12e8677ef66ad2

remove update flags changes

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

M	intern/cycles/render/geometry.cpp
M	intern/cycles/render/geometry.h
M	intern/cycles/render/hair.cpp
M	intern/cycles/render/hair.h
M	intern/cycles/render/mesh.cpp
M	intern/cycles/render/mesh.h
M	intern/cycles/render/scene.cpp

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

diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 9c06e1fd39c..44a5732707b 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -237,6 +237,7 @@ void Geometry::compute_bvh(
     }
   }
 
+  clear_modified();
   need_update_rebuild = false;
 }
 
@@ -258,6 +259,8 @@ bool Geometry::has_voxel_attributes() const
 
 void Geometry::tag_update(Scene *scene, bool rebuild)
 {
+  tag_modified();
+
   if (rebuild) {
     need_update_rebuild = true;
     scene->light_manager->need_update = true;
@@ -1037,61 +1040,23 @@ void GeometryManager::device_update_mesh(
     /* normals */
     progress.set_status("Updating Mesh", "Computing normals");
 
-    uint *tri_shader;
-    uint4 *tri_vindex;
-    uint *tri_patch;
-    if (device_update_flags & DEVICE_TRIANGLES_NEEDS_REALLOC) {
-      tri_shader = dscene->tri_shader.alloc(tri_size);
-      tri_vindex = dscene->tri_vindex.alloc(tri_size);
-      tri_patch = dscene->tri_patch.alloc(tri_size);
-    }
-    else {
-      tri_shader = dscene->tri_shader.data();
-      tri_vindex = dscene->tri_vindex.data();
-      tri_patch = dscene->tri_patch.data();
-    }
-
-    float4 *vnormal;
-    float2 *tri_patch_uv;
-    if (device_update_flags & DEVICE_VERTEX_NEEDS_REALLOC) {
-      vnormal = dscene->tri_vnormal.alloc(vert_size);
-      tri_patch_uv = dscene->tri_patch_uv.alloc(vert_size);
-    }
-    else {
-      vnormal = dscene->tri_vnormal.data();
-      tri_patch_uv = dscene->tri_patch_uv.data();
-    }
-
-    bool tri_shader_modified = (device_update_flags & DEVICE_TRIANGLES_NEEDS_REALLOC);
-    bool tri_vindex_modified = (device_update_flags & DEVICE_TRIANGLES_NEEDS_REALLOC);
-    bool tri_patch_modified = (device_update_flags & DEVICE_TRIANGLES_NEEDS_REALLOC);
-    bool tri_patch_uv_modified = (device_update_flags & DEVICE_VERTEX_NEEDS_REALLOC);
-    bool vnormal_modified = (device_update_flags & DEVICE_VERTEX_NEEDS_REALLOC);
+    uint *tri_shader = dscene->tri_shader.alloc(tri_size);
+    float4 *vnormal = dscene->tri_vnormal.alloc(vert_size);
+    uint4 *tri_vindex = dscene->tri_vindex.alloc(tri_size);
+    uint *tri_patch = dscene->tri_patch.alloc(tri_size);
+    float2 *tri_patch_uv = dscene->tri_patch_uv.alloc(vert_size);
 
     foreach (Geometry *geom, scene->geometry) {
       if (geom->geometry_type == Geometry::MESH || geom->geometry_type == Geometry::VOLUME) {
         Mesh *mesh = static_cast<Mesh *>(geom);
-
-        if (mesh->shader_is_modified() || mesh->smooth_is_modified() || mesh->triangles_is_modified() || (device_update_flags & DEVICE_CURVE_DATA_NEEDS_REALLOC)) {
-          tri_shader_modified = true;
-          mesh->pack_shaders(scene, &tri_shader[mesh->prim_offset]);
-        }
-
-        tri_vindex_modified |= mesh->triangles_is_modified();
-        tri_patch_modified |= mesh->triangles_is_modified();
-        tri_patch_uv_modified |= mesh->vert_patch_uv_is_modified();
-        vnormal_modified |= mesh->triangles_is_modified() || mesh->verts_is_modified();
-
-        if (mesh->triangles_is_modified() || mesh->verts_is_modified() || (device_update_flags & DEVICE_MESH_DATA_NEEDS_REALLOC)) {
-          mesh->pack_normals(&vnormal[mesh->vert_offset]);
-          mesh->pack_verts(tri_prim_index,
-                           &tri_vindex[mesh->prim_offset],
-                           &tri_patch[mesh->prim_offset],
-                           &tri_patch_uv[mesh->vert_offset],
-                           mesh->vert_offset,
-                           mesh->prim_offset);
-        }
-
+        mesh->pack_shaders(scene, &tri_shader[mesh->prim_offset]);
+        mesh->pack_normals(&vnormal[mesh->vert_offset]);
+        mesh->pack_verts(tri_prim_index,
+                         &tri_vindex[mesh->prim_offset],
+                         &tri_patch[mesh->prim_offset],
+                         &tri_patch_uv[mesh->vert_offset],
+                         mesh->vert_offset,
+                         mesh->prim_offset);
         if (progress.get_cancel())
           return;
       }
@@ -1100,60 +1065,22 @@ void GeometryManager::device_update_mesh(
     /* vertex coordinates */
     progress.set_status("Updating Mesh", "Copying Mesh to device");
 
-    if (tri_shader_modified) {
-      dscene->tri_shader.copy_to_device();
-    }
-    if (vnormal_modified) {
-      dscene->tri_vnormal.copy_to_device();
-    }
-    if (tri_vindex_modified) {
-      dscene->tri_vindex.copy_to_device();
-    }
-    if (tri_patch_modified) {
-      dscene->tri_patch.copy_to_device();
-    }
-    if (tri_patch_uv_modified) {
-      dscene->tri_patch_uv.copy_to_device();
-    }
+    dscene->tri_shader.copy_to_device();
+    dscene->tri_vnormal.copy_to_device();
+    dscene->tri_vindex.copy_to_device();
+    dscene->tri_patch.copy_to_device();
+    dscene->tri_patch_uv.copy_to_device();
   }
 
   if (curve_size != 0) {
     progress.set_status("Updating Mesh", "Copying Strands to device");
 
-    float4 *curve_keys;
-    float4 *curves;
-
-    if (device_update_flags & DEVICE_CURVE_KEYS_NEEDS_REALLOC) {
-      curve_keys = dscene->curve_keys.alloc(curve_key_size);
-    }
-    else {
-      curve_keys = dscene->curve_keys.data();
-    }
-
-    if (device_update_flags & DEVICE_CURVES_NEEDS_REALLOC) {
-      curves = dscene->curves.alloc(curve_size);
-    }
-    else {
-      curves = dscene->curves.data();
-    }
-
-    bool curve_keys_modified = (device_update_flags & DEVICE_CURVE_KEYS_NEEDS_REALLOC);
-    bool curves_modified = (device_update_flags & DEVICE_CURVES_NEEDS_REALLOC);
+    float4 *curve_keys = dscene->curve_keys.alloc(curve_key_size);
+    float4 *curves = dscene->curves.alloc(curve_size);
 
     foreach (Geometry *geom, scene->geometry) {
       if (geom->is_hair()) {
         Hair *hair = static_cast<Hair *>(geom);
-
-        bool curve_keys_co_modified = hair->curve_radius_is_modified() || hair->curve_keys_is_modified();
-        bool curve_data_modified = hair->curve_shader_is_modified() || hair->curve_first_key_is_modified();
-
-        if (!curve_keys_co_modified && !curve_data_modified && (device_update_flags & (DEVICE_CURVES_NEEDS_REALLOC | DEVICE_CURVE_KEYS_NEEDS_REALLOC)) == 0) {
-          continue;
-        }
-
-        curve_keys_modified |= curve_keys_co_modified;
-        curves_modified |= curve_data_modified;
-
         hair->pack_curves(scene,
                           &curve_keys[hair->curvekey_offset],
                           &curves[hair->prim_offset],
@@ -1163,12 +1090,8 @@ void GeometryManager::device_update_mesh(
       }
     }
 
-    if (curve_keys_modified) {
-      dscene->curve_keys.copy_to_device();
-    }
-    if (curves_modified) {
-      dscene->curves.copy_to_device();
-    }
+    dscene->curve_keys.copy_to_device();
+    dscene->curves.copy_to_device();
   }
 
   if (patch_size != 0) {
@@ -1313,8 +1236,6 @@ void GeometryManager::device_update_preprocess(Device *device, Scene *scene, Pro
     return;
   }
 
-  device_update_flags = 0;
-
   scoped_callback_timer timer([scene](double time) {
     if (scene->update_stats) {
       scene->update_stats->geometry.times.add_entry({"device_update_preprocess", time});
@@ -1352,47 +1273,13 @@ void GeometryManager::device_update_preprocess(Device *device, Scene *scene, Pro
 
       Volume *volume = static_cast<Volume *>(geom);
       create_volume_mesh(volume, progress);
-
-      device_update_flags |= DEVICE_MESH_DATA_NEEDS_REALLOC;
     }
 
     if (geom->is_hair()) {
       /* Set curve shape, still a global scene setting for now. */
       Hair *hair = static_cast<Hair *>(geom);
       hair->curve_shape = scene->params.hair_shape;
-
-      if (hair->previous_keys_num != hair->num_keys()) {
-        device_update_flags |= DEVICE_CURVE_KEYS_NEEDS_REALLOC;
-        hair->previous_keys_num = hair->num_keys();
-      }
-
-      if (hair->previous_curves_num != hair->num_curves()) {
-        device_update_flags |= DEVICE_CURVES_NEEDS_REALLOC;
-        hair->previous_curves_num = hair->num_curves();
-      }
     }
-
-    if (geom->is_mesh()) {
-      Mesh *mesh = static_cast<Mesh *>(geom);
-
-      if (mesh->previous_verts_count != mesh->get_verts().size()) {
-        device_update_flags |= DEVICE_VERTEX_NEEDS_REALLOC;
-        mesh->previous_verts_count = mesh->get_verts().size();
-      }
-
-      if (mesh->previous_triangles_count != mesh->get_triangles().size()) {
-        device_update_flags |= DEVICE_TRIANGLES_NEEDS_REALLOC;
-        mesh->previous_triangles_count = mesh->get_triangles().size();
-      }
-    }
-  }
-
-  if (update_flags & (MESH_ADDED | MESH_REMOVED)) {
-    device_update_flags |= DEVICE_MESH_DATA_NEEDS_REALLOC;
-  }
-
-  if (update_flags & (HAIR_ADDED | HAIR_REMOVED)) {
-    device_update_flags |= DEVICE_CURVE_DATA_NEEDS_REALLOC;
   }
 
   need_flags_update = false;
@@ -1576,8 +1463,6 @@ void GeometryManager::device_update(Device *device,
         DiagSplit dsplit(*mesh->subd_params);
         mesh->tessellate(&dsplit);
 
-        device_update_flags |= DEVICE_MESH_DATA_NEEDS_REALLOC;
-
         i++;
 
         if (progress.get_cancel())
@@ -1746,12 +1631,7 @@ void GeometryManager::device_update(Device *device,
       return;
   }
 
-  foreach (Geometry *geom, scene->geometry) {
-    geom->clear_modified();
-  }
-
   need_update = false;
-  update_flags = 0;
 
   if (true_displacement_used) {
     /* Re-tag flags for update, so they're re-evaluated
@@ -1778,33 +1658,19 @@ void GeometryManager::device_free(Device *device, DeviceScene *dscene)
   dscene->bvh_leaf_nodes.free();
   dscene->object_node.free();
   dscene->prim_tri_verts.free();
-
   dscene->prim_tri_index.free();
   dscene->prim_type.free();
   dscene->prim_visibility.free();
   dscene->prim_index.free();
   dscene->prim_object.free();
   dscene->prim_time.free();
-
-  if (device_update_flags & DEVICE_TRIANGLES_NEEDS_REALLOC) {
-    dscene->tri_shader.free();
-    dscene->tri_vindex.free();
-    dscene->tri_patch.free();
-  }
-
-  if (device_update_flags & DEVICE_VERTEX_NEEDS_REALLOC) {
-    dscene->tri_vnormal.free();
-    dscene->tri_patch_uv.free();
-  }
-
-  if (device_update_flags & DEVICE_CURVES_NEEDS_REALLOC) {
-    dscene->curves.free();
-  }
-
-  if (device_update_flags & DEVICE_CURV

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list