[Bf-blender-cvs] [57e5330ffac] cycles_procedural_api: Merge branch 'master' into arcpatch-D8544

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


Commit: 57e5330ffacf714722b459d2e679d5d20a7d4387
Author: Kévin Dietrich
Date:   Wed Oct 28 15:18:36 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB57e5330ffacf714722b459d2e679d5d20a7d4387

Merge branch 'master' into arcpatch-D8544

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



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

diff --cc intern/cycles/render/geometry.cpp
index 910148a9d3b,cbd5e7e83fb..e73234240b8
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@@ -120,6 -116,16 +120,18 @@@ bool Geometry::need_attribute(Scene * /
    return false;
  }
  
+ AttributeRequestSet Geometry::needed_attributes()
+ {
+   AttributeRequestSet result;
+ 
 -  foreach (Shader *shader, used_shaders)
++  foreach (Node *node, used_shaders) {
++    Shader *shader = static_cast<Shader *>(node);
+     result.add(shader->attributes);
++  }
+ 
+   return result;
+ }
+ 
  float Geometry::motion_time(int step) const
  {
    return (motion_steps > 1) ? 2.0f * step / (motion_steps - 1) - 1.0f : 0.0f;
@@@ -382,6 -382,63 +391,63 @@@ void GeometryManager::update_osl_attrib
  #endif
  }
  
+ /* Generate a normal attribute map entry from an attribute descriptor. */
+ static void emit_attribute_map_entry(
+     uint4 *attr_map, int index, uint id, TypeDesc type, const AttributeDescriptor &desc)
+ {
+   attr_map[index].x = id;
+   attr_map[index].y = desc.element;
+   attr_map[index].z = as_uint(desc.offset);
+ 
+   if (type == TypeDesc::TypeFloat)
+     attr_map[index].w = NODE_ATTR_FLOAT;
+   else if (type == TypeDesc::TypeMatrix)
+     attr_map[index].w = NODE_ATTR_MATRIX;
+   else if (type == TypeFloat2)
+     attr_map[index].w = NODE_ATTR_FLOAT2;
+   else if (type == TypeFloat4)
+     attr_map[index].w = NODE_ATTR_FLOAT4;
+   else if (type == TypeRGBA)
+     attr_map[index].w = NODE_ATTR_RGBA;
+   else
+     attr_map[index].w = NODE_ATTR_FLOAT3;
+ 
+   attr_map[index].w |= desc.flags << 8;
+ }
+ 
+ /* Generate an attribute map end marker, optionally including a link to another map.
+  * Links are used to connect object attribute maps to mesh attribute maps. */
+ static void emit_attribute_map_terminator(uint4 *attr_map, int index, bool chain, uint chain_link)
+ {
+   for (int j = 0; j < ATTR_PRIM_TYPES; j++) {
+     attr_map[index + j].x = ATTR_STD_NONE;
+     attr_map[index + j].y = chain;                      /* link is valid flag */
+     attr_map[index + j].z = chain ? chain_link + j : 0; /* link to the correct sub-entry */
+     attr_map[index + j].w = 0;
+   }
+ }
+ 
+ /* Generate all necessary attribute map entries from the attribute request. */
+ static void emit_attribute_mapping(
+     uint4 *attr_map, int index, Scene *scene, AttributeRequest &req, Geometry *geom)
+ {
+   uint id;
+ 
+   if (req.std == ATTR_STD_NONE)
+     id = scene->shader_manager->get_attribute_id(req.name);
+   else
+     id = scene->shader_manager->get_attribute_id(req.std);
+ 
+   emit_attribute_map_entry(attr_map, index, id, req.type, req.desc);
+ 
 -  if (geom->type == Geometry::MESH) {
++  if (geom->is_mesh()) {
+     Mesh *mesh = static_cast<Mesh *>(geom);
 -    if (mesh->subd_faces.size()) {
++    if (mesh->get_num_subd_faces()) {
+       emit_attribute_map_entry(attr_map, index + 1, id, req.subd_type, req.subd_desc);
+     }
+   }
+ }
+ 
  void GeometryManager::update_svm_attributes(Device *,
                                              DeviceScene *dscene,
                                              Scene *scene,
@@@ -652,10 -685,10 +694,11 @@@ void GeometryManager::device_update_att
    for (size_t i = 0; i < scene->geometry.size(); i++) {
      Geometry *geom = scene->geometry[i];
  
+     geom->index = i;
      scene->need_global_attributes(geom_attributes[i]);
  
 -    foreach (Shader *shader, geom->used_shaders) {
 +    foreach (Node *node, geom->get_used_shaders()) {
 +      Shader *shader = static_cast<Shader *>(node);
        geom_attributes[i].add(shader->attributes);
      }
    }
diff --cc intern/cycles/render/geometry.h
index 1a374c57463,9367c4a9de7..735fef7d0c2
--- a/intern/cycles/render/geometry.h
+++ b/intern/cycles/render/geometry.h
@@@ -88,8 -88,12 +88,11 @@@ class Geometry : public Node 
    bool has_surface_bssrdf; /* Set in the device_update_flags(). */
  
    /* Update Flags */
 -  bool need_update;
    bool need_update_rebuild;
  
+   /* Index into scene->geometry (only valid during update) */
+   size_t index;
+ 
    /* Constructor/Destructor */
    explicit Geometry(const NodeType *node_type, const Type type);
    virtual ~Geometry();



More information about the Bf-blender-cvs mailing list