Add an iterator `foreach_action_slot_use_with_references(ID, callback)`
that provides references to the found `bAction` pointer and slot handle.
That way the callback can assign another Action or slot when it sees
fit, without having to know exactly what the source of this info is
(could be a direct assignment, but also an NLA strip or Action
Constraint).
Ref: #127844
Pull Request: https://projects.blender.org/blender/blender/pulls/127871
This PR introduces parallel shader compilation for Vulkan shader
modules. This will improve shader compilation when switching to material
preview or EEVEE render preview. It also improves material compilation.
However in order to measure the differences shaderc needs to be updated.
PR has been created so we can already start with the code review. This
PR doesn't include SPIR-V caching, what will land in a separate PR as
it needs more validation.
Parallel shader compilation has been tested on AMD/NVIDIA on Linux.
Testing on other platforms is planned in the upcoming days.
**Performance**
```
AMD Ryzen™ 9 7950X × 32, 64GB Ram
Operating system: Linux-6.8.0-44-generic-x86_64-with-glibc2.39 64 Bits, X11 UI
Graphics card: Quadro RTX 6000/PCIe/SSE2 NVIDIA Corporation 4.6.0 NVIDIA 550.107.02
```
*Test*: Start blender, open barbershop_interior.blend and wait until the viewport
has fully settled.
| Backend | Test | Duration |
| ------- | ------------------------- | -------- |
| OpenGL | Coldstart/No subprocesses | 1:52 |
| OpenGL | Coldstart/8 Subprocesses | 0:54 |
| OpenGL | Warmstart/8 Subprocesses | 0:06 |
| Vulkan | Coldstart Without PR | 0:59 |
| Vulkan | Warmstart Without PR | 0:58 |
| Vulkan | Coldstart With PR | 0:33 |
| Vulkan | Warmstart With PR | 0:08 |
The difference in time (why OpenGL is faster in a warm start is that all
shaders are cached). Vulkan in this case doesn't cache anything and all
shaders are recompiled each time. Caching the shaders will be part of
a future PR. Main reason not to add it to this PR directly is that SPIR-V
cannot easily be validated and would require a sidecar to keep SPIR-V
compatible with external tools..
**NOTE**:
- This PR was extracted from #127418
- This PR requires #127564 to land and libraries to update. Linux lib
is available as attachment in this PR. It works without, but is as slow as
single threaded compilation.
Pull Request: https://projects.blender.org/blender/blender/pulls/127698
Follow up to 5d40992fe8.
In the PBVH API, some contexts that take a `float *` parameter named
`depth` use it purely as a return value, other places, however, read
from and write to this parameter.
In the former case, this commit either adds or keeps the `r_` prefix, in
the latter, this commit ensures the parameter has no prefix to avoid
misleading future readers.
Pull Request: https://projects.blender.org/blender/blender/pulls/127886
The property "angle_limit" in bevel and decimate modifier only has a
display precision of 2, but the steps are in 0.1 for each click, so
clicking does not necessarily cause the display number to update. Set
precision to 4 to allow fractions to be displayed properly.
Currently the `sum_group_sizes` call used to count the number
of elements in GPU vertex buffers for each PBVH node stands out
in profiles, taking a few percent of the total time when building
PBVH GPU data. Since the number of corners in a node doesn't
change, it's simpler to just store it in the node. We could
eventually cache it somewhere else too, if there was a benefit
to not storing it in the node itself.
Because the pbvh::Tree has a unique_ptr, the copy assignment constructor
is implicitly deleted. This change makes that fact explicit by declaring
the entire object's copy assignment constructor as deleted.
Pull Request: https://projects.blender.org/blender/blender/pulls/127884
A set of general tidying steps prior to making some PBVHVertRef changes
* Add const where possible
* Add r_ prefix for return parameters
* Use pass-by-reference instead of pointer for some return parameters
* Use std::array's .size() operator for some iteration bounds
* Use float3 for some variables
Pull Request: https://projects.blender.org/blender/blender/pulls/127832
Prior behavior when hovering over the corner action zones the mouse
cursor would change to WM_CURSOR_EDIT (like a plus sign). With docking
that is WM_CURSOR_HAND, but on other platforms it is WM_CURSOR_MOVE.
Unfortunately on some platforms WM_CURSOR_MOVE does not show a
different cursor from default so there isn't an change when hovering
the corner. This PR changes this back to WM_CURSOR_EDIT for non-Mac
platforms.
Pull Request: https://projects.blender.org/blender/blender/pulls/127878
The behavior was unintentionally changed in 2858c3b287. This patch brings back
the old behavior when dragging objects/collections from the asset browser into
the 3d view, while still keeping the loose-data-instantiation separate from the
core import code.
The `view3d_ob_drop_copy_external_asset` and `view3d_collection_drop_copy_external_asset`
functions are turned to their old state before the refactor.
Pull Request: https://projects.blender.org/blender/blender/pulls/127452
VSE tonemap is 12-15 times faster.
1) multi-threaded image luminance calculation,
2) avoid calling into OpenColorIO per-pixel, instead do that in
larger batches,
3) for float images (which are primary target for tonemapping),
do not do "to linear space" conversion twice.
Applying tonemap on 4K resolution EXR image, on Ryzen 5950X (Win10/VS2022):
- R/D Photoreceptor mode: 405 -> 31 ms
- Rh Simple mode: 388 -> 23 ms
Pull Request: https://projects.blender.org/blender/blender/pulls/127467
This adds a new `BKE_id_name` function. It should be used in places where we
currently do something like `id.name + 2`.
This patch just adds the function and uses them in a small subset of possible
cases. Given that there are >700 cases that need to be replaced, I'd rather to
that in chunks instead of all at once.
Pull Request: https://projects.blender.org/blender/blender/pulls/127410
The issue was that `retrieve_editable_drawings_grouped_per_frame`
returned garbage memory, leading to a crash a bit further.
The fix adds a nullptr check to make sure the `current_drawing` exists
and can be safely dereferenced.
Skip the evaluation of the Action constraint when no Action is set.
Before, the constraint would run an entire animation data evaluation
cycle on a fake object, with the given (but NULL) Action. Now it's just
skipped.
Implements a simple splash screen notice displayed if an x86/Intel macOS
Blender build is ran on an Apple Silicon Mac to warn against reduced
performance.
On the technical side of things, this adds a function that detects if
the current process is currently running through Rosetta using `sysctl`.
Implementation wise, I tried to keep this function contained in a single
conditional preprocessor macro block in the same file for simplicity.
Co-authored-by: Harley Acheson <harley.acheson@gmail.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/124382
This is a follow up to #126559. In that PR I temporarily removed the
strip subtypes from RNA because I didn't have the brain space to tackle
updating that at the same time.
This PR restores the strip subtypes in RNA, even though the strip
themselves don't exist as separate C++ types anymore. Now the RNA type
that we present the strip as depends on the type of strip data the strip
references.
Note that currently there is only one subtype: the keyframe strip.
Pull Request: https://projects.blender.org/blender/blender/pulls/127859
Add some F-Curve getter functions that work in all these situations:
- Built without experimental features.
- Built with experimental features, and called with legacy Action.
- Built with experimental features, and called with layered Action.
No functional changes, just useful tools for migrating to the new
Actions API.
Ref: #120406
Pull Request: https://projects.blender.org/blender/blender/pulls/127841
The `factor` property that controls the noise on the positions
was named `Offset Factor` in RNA but this name is overriden
in the modifier to `Position`.
When this property is e.g. keyed the RNA UI name is used
which can be very confusing.
This renames the RNA UI name to "Position Factor" to avoid
this confusion.
The unlit packing could write to the (non-existing) 4th
closure bin inside the gbuffer header leading to no
combined pass shader being invoked for these specific
(complex) materials.
Making sure the unlit workaround writes to bin 0 fixes the
issue.
Pull Request: https://projects.blender.org/blender/blender/pulls/127811
Object with degenerate transform matrix can lead to flat
bounds on GPU. This in turn lead to NaN intersection planes
inside `IsectBox`.
Compute (pseudo) size of matrix and bypass culling is any
axis is too small.
The other part of the patch makes sure that there is a
distinction between disabled culling and invalid
bounding boxes.
Pull Request: https://projects.blender.org/blender/blender/pulls/127807
This commit adds the `Reproject Strokes` operator in the
`Grease Pencil` > `Cleanup` menu in edit mode.
All similar operator settings have been ported over from GPv2.
Pull Request: https://projects.blender.org/blender/blender/pulls/127735
Revert part of 9530852347 as that did not
take into account that the `max` property may actually be smaller than
the `min` property.
I've also taken the liberty to document this fact in some comments.
The fix for the crash when `min == max` is still in place.
Windows/Intel and Apple drivers do not support dynamic
rendering unused attachments. Due to mistakes we made
this extension partly optional. Eg. the extension was
optional, but its settings were not.
This PR makes the extension fully optional. However
without the extension some drivers might make incorrect
assumptions. This should be solved when it is more clear
why some drivers are still crashing when using dynamic
rendering.
Pull Request: https://projects.blender.org/blender/blender/pulls/127839
As part of a more general Objective-C GHOST refactor and in an effort to
modernize the macOS backend for further works, this commit cleans up the
codestyle of Objective-C files. Based off the Blender C/C++ style guide,
in addition to some Objective-C specific style changes.
Changes:
- `const` correctness, use nullptr, initializer list for simple struct
- Reduced variable scope for simple functions, removed unused variables
- Use braces for conditional statements, no else after return
- Annotate inheritted function of GHOST Cocoa classes with override and
use `= default` to define trivial constructors
- Use #import instead of #include for Objective-C headers
This is only for correctness. As the Objective-C #import directive
is really just an #include with an implicit #pragma once.
- Use proper C-style comments instead of #pragma mark
#pragma mark is an XCode feature to mark code chapters, to follow
the Blender codestyle, and make the Objective-C code more editor
agnostic, these were replaced with multi-line C-style comments.
Ref #126772
Pull Request: https://projects.blender.org/blender/blender/pulls/126770
This requires writing selection attributes to a different domain than
the Point domain.
Note that for assigning/removing from vgroups the `adapt_domain`
function is used implicitly by always looking up attributes from the
Point domain: ".selection" may be stored on Curves and will
automatically be adapted to points. For select-by-vgroup `adapt_domain`
cannot be used because the selection has to be "greedy" (one point
selects the whole curve).
Pull Request: https://projects.blender.org/blender/blender/pulls/127799