Commit Graph

11 Commits

Author SHA1 Message Date
Sybren A. Stüvel
a3b8ea843c Anim: Add 'unshare' node to driver evaluation dependency graph
Add a new node to the dependency graph, to act as a single entry point
before drivers are evaluated in parallel.

The node will take all the driven RNA properties, and write their
current value to the property again. This ensures that any implicitly
shared data is copied to ensure writability. Subsequent concurrent
writes by the driver evaluation will then be safe, as the
thread-unsafe part has already been performed.

Fixes: #132423

Pull Request: https://projects.blender.org/blender/blender/pulls/135802
2025-05-01 11:49:21 +02:00
Hans Goudey
3630fd78d5 Cleanup: Depsgraph: Avoid transative includes and type aliases
Instead of the monolothic `depsgraph_type.hh` header that includes
most types used in the despgraph, just add includes where they are
actually necessary. Also remove the `using` keywords for `std` types.
The lack of specificity isn't considered good practice nowadays.

Removing unnecessary transitive includes can help improve compile
times because the time spent parsing headers decreases. Using the
"include what you use" pattern makes futher improvements much
easier too, since it the path to further reduce transitive includes
becomes much clearer.

Pull Request: https://projects.blender.org/blender/blender/pulls/133749
2025-01-31 21:17:49 +01:00
Brecht Van Lommel
c335ff596c Cleanup: Various clang-tidy warnings in depsgraph
Pull Request: https://projects.blender.org/blender/blender/pulls/133734
2025-01-31 17:03:17 +01:00
Sergey Sharybin
40ae2d7df6 Fix #126949: Regression: Geometry nodes - instances and boolean operation bug
The issue is due to a dependency cycle which leads to access of data
which is not ready yet.
The dependency cycle was introduced in ada367a0e9.

This change makes it so there is no dependency cycle in the setup from
the report by re-routing dependencies a bit: the light linking now
bypasses the geometry component and is only wired to an operation
related on instancing collection (but not use by a boolean modifier).

Pull Request: https://projects.blender.org/blender/blender/pulls/127143
2024-09-04 16:31:48 +02:00
Hans Goudey
81a63153d0 Despgraph: Rename "copy-on-write" to "copy-on-evaluation"
The depsgraph CoW mechanism is a bit of a misnomer. It creates an
evaluated copy for data-blocks regardless of whether the copy will
actually be written to. The point is to have physical separation between
original and evaluated data. This is in contrast to the commonly used
performance improvement of keeping a user count and copying data
implicitly when it needs to be changed. In Blender code we call this
"implicit sharing" instead. Importantly, the dependency graph has no
idea about the _actual_ CoW behavior in Blender.

Renaming this functionality in the despgraph removes some of the
confusion that comes up when talking about this, and will hopefully
make the depsgraph less confusing to understand initially too. Wording
like "the evaluated copy" (as opposed to the original data-block) has
also become common anyway.

Pull Request: https://projects.blender.org/blender/blender/pulls/118338
2024-02-19 15:54:08 +01:00
Sergey Sharybin
2cc6eab244 Cleanup: Simplify tracking of relations for instancing
Instead of having a set of hardcoded rules in the collection and
object instance collection builder introduce new node on object's
INSTANCING component which is to be hooked up to the node which is
duplicating the object.

Should be no functional changes.
2024-01-19 09:24:57 +01:00
Sergey Sharybin
fc42227b2d Cleanup: Make duplication node and ocmponent name more clear
Follow the new terminology of instancing, and make it clear what
side it is (instancer or instancee).
2024-01-19 09:24:57 +01:00
Sergey Sharybin
efba5f0432 Depsgraph: Add explicit object shading exit operation
Currently there is no functional changes.

In the future it allows to more easily hook the shading component
to other nodes to ensure the visibility flow.

Note that since the operation is not used by any relation it will
appear disconnected in the graphviz debugger. This is due to the
current behavior of deg_graph_remove_unused_noops().
2024-01-19 09:24:57 +01:00
Hans Goudey
d6cfd7d1f4 Cleanup: Remove unnecessary keywords from C++ headers
- Remove unnecessary `struct`
- Use `using` instead of `typedef`
- Remove `void` from `(void)` as function arguments
2024-01-04 15:07:48 -05:00
Hans Goudey
8a9dad1f2c Cleanup: Remove unnecessary struct keyword from newly C++ headers
Also remove `void` in `(void)`.
2023-09-22 08:08:19 -04:00
Hans Goudey
867f99c2af Cleanup: Move depsgraph headers to C++
Pull Request: https://projects.blender.org/blender/blender/pulls/110816
2023-09-22 03:18:17 +02:00