Commit Graph

113416 Commits

Author SHA1 Message Date
Jeroen Bakker
d75cf2efd4 Vulkan: Refactor resource binding
Resource binding was over-complicated as I didn't understood the state
manager and vulkan to make the correct decisions at that time. This
refactor will remove a lot of the complexity and improves the performance.

**Performance**

The performance improvement is noticeable in complex grease pencil
scenes.

Grease pencil benchmark file picknick:
- `NVIDIA Quadro RTX 6000` 17 fps -> 24 fps
- `Intel(R) Arc(tm) A750 Graphics (DG2)` 6 -> 21 fps

**Bottle-neck**

The performance improvements originates from moving the update entry
point from state manager to shader interface. The previous implementation
(state manager) had to loop over all the bound resources and find in the
shader interface where it was located in the descriptor set. Ignoring
resources that were not used by the shader. But also making it hard
to determine if descriptor sets actually changed. Previous implementation
assumed descriptor sets always changed.

When descriptor set changed a new descriptor set needed to be allocated.
Most drivers this is a fast operation, but on Intel/Mesa this was measurable
slow. Using an allocation pool doesn't fit the Vulkan API as you are only
able to reuse when the layout matches exactly. Of course doable, but requires
another structure to keep track of the actual layouts.

**Solution**

By using the shader interface as entry point we can:
1. Keep track if there are any changes in the state manager. If not and the
   layout is the same, the previous shader can be reused.
2. In stead of looping over each bound resource, we loop over bind points.

**Future extensions**

Bundle all descriptor set uploads just before use. This would be more
in line with how 'modern' Vulkan should be implemented. This PR already
separates the uploading from the updating and technically allows to upload
more than one descriptor set.

Instead of looking 1 set back we should measure if we can handle multiple
or keep track of the different layouts resources to improve the performance
even further.

Optional use `VK_KHR_descriptor_buffer` when available.

Pull Request: https://projects.blender.org/blender/blender/pulls/128068
2024-09-26 10:59:45 +02:00
Sybren A. Stüvel
9eae533e89 Fix #127908: Layered Action - slot users doesn't include action constraint
Use the `foreach_action_slot_use(id, callback)` iterator function to find
all action/slot uses of an ID. That already handles the action constraint,
and thus solves the issue.

Pull Request: https://projects.blender.org/blender/blender/pulls/128090
2024-09-26 10:54:16 +02:00
George Mavroeidis
ceaa064b97 Cleanup: Grease Pencil: Correct stroke outline tooltip description
Replaced "Convert stroke to **perimeter**" with "Convert stroke to **outline**"
in the outline tooltip description.

It was suggested that the description is not accurate and could be misleading
between the two terms. Thus, I simply just replaced the word across all tooltip
descriptions to keep it consistent and easily understood.

Resolves #126814.

Pull Request: https://projects.blender.org/blender/blender/pulls/127990
2024-09-26 10:39:33 +02:00
Christoph Lendenfeld
fae19d7c92 Anim: Eyedropper for bone properties
This adds an eyedropper button to properties where you can choose a bone.

Clicking it activates the modal operation and you can pick:
* Bones from the Outliner
* Bones from the 3D Viewport if the Armature is in Pose Mode or Edit Mode

## Limitation

Picking from the 3D viewport while in Object Mode doesn't work due to technical reasons.
The selection buffer is only filled with pose bones if the armature is in pose mode.
Using the picker while in object mode gives you the Armature object, not its bones.

So you cannot use the bone picker to constrain an object to a bone.
UNLESS you pin the panel with the object, go to pose mode and then pick.

There is a warning printed for those cases to tell the user why this hasn't worked.

Pull Request: https://projects.blender.org/blender/blender/pulls/121523
2024-09-26 10:05:09 +02:00
Aras Pranckevicius
70247df9b9 Fix: VSE tonemap effect is_point_inside_quad check was wrong
+0.5 should be added to integer pixel coordinate (sampling at pixel
center). This is only really visible in very specific scenarios, but
is more correct.
2024-09-26 10:17:31 +03:00
Campbell Barton
32c6f9bbd0 Cleanup: use PyModule_AddObjectRef where appropriate 2024-09-26 17:08:34 +10:00
Aras Pranckevicius
596067ea35 Fix #125446: Video decoding artifacts with some video widths
Previous fix (b17734598d) tried to fix this, but it seems that
depending on CPU and video width, ffmpeg might need at least 64
byte alignment, even if CPU we're running on is only AVX2 (32 byte
alignment). That is because some other parts of ffmpeg code
statically pick 64 or 32 byte alignment internally, depending on whether
AVX512 support is even compiled in (even if CPU might not have it).

I have checked whether this does not negatively affect a platform where
SIMD alignment is always 16 (Mac), and it does not, everything works as
expected.

Pull Request: https://projects.blender.org/blender/blender/pulls/128107
2024-09-26 08:50:48 +02:00
Campbell Barton
473bd60164 Cleanup: clarify arguments using const or r_ prefixed return args 2024-09-26 15:03:24 +10:00
Campbell Barton
60e96e40b9 Cleanup: various non-functional changes 2024-09-26 14:05:33 +10:00
Campbell Barton
c8b6b0c8d8 Cleanup: access the object mode directly in poll functions 2024-09-26 12:07:55 +10:00
Campbell Barton
c6782f53b7 Docs: add note to avoid incorrect use of XRAY_ENABLED
Avoid issues similar to #128074 happening in the future.
2024-09-26 11:50:28 +10:00
Germano Cavalcante
b0d37b4267 Fix #128074: Edit Mesh being occluded for snapping even in Xray
Caused by 1c77779160

That commit removed the part that created the skip_occlusion_plane
variable for edit meshes. Therefore, restore that part of the code.
2024-09-25 22:42:24 -03:00
Campbell Barton
36edfe04e0 Refactor: move blenlib tempfile to C++ 2024-09-26 09:39:35 +10:00
Habib Gahbiche
aac0c2cc5f Fix #127051: Compositing using multiple Levels nodes freezes Blender
Multiple levels nodes in a row causes blender to freeze when combined with other constant operations. Also, current results of standard deviation are wrong.

The problem was that constant folding optimized constant operations away, which caused a cyclic node graph, and therefore the freeze during node graph evaluation. Preventing such optimizations solves the problem.

Pull Request: https://projects.blender.org/blender/blender/pulls/127316
2024-09-26 01:37:23 +02:00
Sean Kim
d80011d11a Cleanup: Fix missing-declarations warning
Missed in 16550f78ea

Pull Request: https://projects.blender.org/blender/blender/pulls/128140
2024-09-25 23:13:33 +02:00
Hans Goudey
18c59d02a3 Fix: Lite build error after recent VSE commit
b4e5412a28
2024-09-25 16:04:38 -04:00
Sean Kim
16550f78ea Cleanup: Sculpt: Consolidate Flatten, Fill, and Scrape brushes
These brushes all share the same code except for a single line which
adds an optional extra filter on the factors when performing the brush
stroke and a single inversion of the offset for the scrape brush.

Pull Request: https://projects.blender.org/blender/blender/pulls/128048
2024-09-25 21:54:16 +02:00
notrudyyy
76d4686987 Cleanup: Fix mesh face corner next/prev function descriptions
Swaps the descriptions of face_corner_prev and face_corner_next to be correct.

Pull Request: https://projects.blender.org/blender/blender/pulls/128137
2024-09-25 21:52:11 +02:00
Pratik Borhade
f90e1b506f Fix: Hide id operator for menus in context menu
Continuation of !126927.  Do not show some items on the button context
menu when not appropriate. Handle the case of MenuType buttons.

Pull Request: https://projects.blender.org/blender/blender/pulls/128070
2024-09-25 21:43:41 +02:00
Hans Goudey
90ec79992f Fix: Potential crash in mesh comparison tests with mismatched attributes
Currently we allow the before/after meshes to have different
sets of attributes. But then we compare all attributes in each
mesh anyway, regardless of whether they exist or not.
2024-09-25 15:22:19 -04:00
Germano Cavalcante
504c1506b2 Fix: Snap to Grid with constraint limited to floor level
Caused by 1180a25c23

The `use_init_co` member can vary after a transformation.
It indicates whether to use the ground level or the 3D grid.
2024-09-25 16:06:21 -03:00
Miguel Pozo
2223d995fc Fix: Draw: Bounds usage
The first commit ensures IsectBoxes are not set up unless
they are valid.

The second commit renames
`drw_bounds_are_valid` to `drw_bounds_corners_are_valid`,
and `drw_bounds_culling_enabled` to `drw_bounds_are_valid`
so it's harder to set up an invalid `IsectBox` by mistake.

(Continuation of #127807)

Pull Request: https://projects.blender.org/blender/blender/pulls/128125
2024-09-25 19:58:38 +02:00
Sean Kim
df251784cd Fix: Avoid accessing face set with invalid index
When the PBVH is rebuilt, the `active_face_index` and
`active_grid_index` fields are initialized to -1. This results in a
possible segmentation fault if the `active_face_set_get` method is
called without these fields being populated.

This commit switches the raw `int` usage for `std::optional` to
better communicate the intent of these fields.

Pull Request: https://projects.blender.org/blender/blender/pulls/127959
2024-09-25 19:19:21 +02:00
Jonas Holzman
5cfe733f84 UI: Color Picker layout rework
Refactoring of the color picker popup. This simplifies code, removes
cruft, and adds new features. The Hex input is removed from its own
tab and placed at the bottom of the layout. The picker circle is made
just a bit smaller. "#" added to the hex values.

Pull Request: https://projects.blender.org/blender/blender/pulls/125675
2024-09-25 18:56:32 +02:00
Sebastian Parborg
b4e5412a28 VSE: Unwanted offset when adding a sound strip
When adding sound strips, it would in some cases be offset
from the desired start position.

This was because some sound files had a start time that was not 0
even if they didn't have any video file associated with them.
Only try to shift the sound strip around if it is added with a video
strip.

Pull Request: https://projects.blender.org/blender/blender/pulls/127256
2024-09-25 18:53:55 +02:00
Bastien Montagne
22477956e2 Refactor: Move BPY main/public extern headers to proper C++ ones.
Pull Request: https://projects.blender.org/blender/blender/pulls/128081
2024-09-25 18:04:33 +02:00
Bastien Montagne
6c0c53161e Refactor: Move BPY bmesh headers to proper C++ ones. 2024-09-25 18:04:27 +02:00
Bastien Montagne
c3247aa4f0 Refactor: Move BPY generic headers to proper C++ ones.
NOTE: `bgl.h` was left unchanged, as it is deprecated code anyway, and
its conversion to C++ does not seem immediately trivial.
2024-09-25 18:04:27 +02:00
Bastien Montagne
4fac7828e4 Refactor: Move BPY mathutils headers to proper C++ ones.
This module actually was confusing, since only a few headers were
effectively still C ones (using the `extern "C"` blocks)...
2024-09-25 18:04:27 +02:00
Bastien Montagne
4dd11465bc Refactor: Move BPY intern remaining headers to proper C++ ones. 2024-09-25 18:04:27 +02:00
Bastien Montagne
198a1ec7a9 Refactor: Move BPY intern bpy_app headers to proper C++ ones. 2024-09-25 18:04:27 +02:00
Bastien Montagne
91e4bcd204 Refactor: Move BPY intern bpy_rna headers to proper C++ ones. 2024-09-25 18:04:27 +02:00
Pratik Borhade
120d2b867b Fix #127365: Bisect operator modal keys missing in status bar
`workspace->runtime->status` is not empty, which gave perference to
existing text instead of the modal operator keys in `uiTemplateInputStatus()`.
To fix this for bisect operator, clear `status` vector in modal
function.

Pull Request: https://projects.blender.org/blender/blender/pulls/127449
2024-09-25 17:59:23 +02:00
Aleš Jelovčan
9ee00e3711 Fix #128119: GPv3: Modifier UI cleanups
The following changes were made:
* Update the icons of the "Smooth" and "Line Art" modifier to use the same icons as before
* Update the "Array", "Mirror", and "Subdivide" modifiers to not use "strokes" in the name.

Pull Request: https://projects.blender.org/blender/blender/pulls/128122
2024-09-25 16:47:58 +02:00
Jason Fielder
57f7d6380c Fix #126542 Fix UV Edge overlays in Metal
Takes into account any offset that must be added to the vertex index
(usually supplied as baseVertex or startVertex in the Metal draw call)
in the code that emulates the SSBO vertex fetch.

Authored by Apple: James McCarthy

Pull Request: https://projects.blender.org/blender/blender/pulls/127864
2024-09-25 15:22:30 +02:00
Laurynas Duburas
84dedfaf4b Curves: smooth handles
Adds antialiasing to curve's handles and thickness to active ones.
Also handles now react to
 `Preferences > Interface > Display > Resolution Scale` and
`Preferences > Themes > 3D Viewport > Edge Width` as they do in
legacy curves.

Pull Request: https://projects.blender.org/blender/blender/pulls/122910
2024-09-25 15:21:31 +02:00
Lukas Tönne
12ef319a49 Support Menu sockets in the for-each-element zone
Adds support for the "Menu" socket type in for-each-element zones. This
only includes field inputs and their matching per-element values, but
not outputting attributes of type Menu (Menu attributes are not
generally supported at this point).

A dedicated enum propagation function is added for the zone input node.
This isn't technically necessary: the first 2 inputs and outputs should
be ignored but are not menus anyway. However, this is clearer and
provides a place for future changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/128106
2024-09-25 15:13:16 +02:00
Hans Goudey
f4de8c1a67 Fix: Incorrect viewport transform node tooltip
The View matrix isn't really the direction and location of the viewport,
it's the opposite, since it transforms object space into camera space.
Change both tooltips to state the change of transform space instead
of using nouns to try to describe what they "are".

Pull Request: https://projects.blender.org/blender/blender/pulls/124741
2024-09-25 15:10:39 +02:00
Philipp Oeser
e71c844354 Fix #127944: Normal rotates in wrong direction
Not verified by actually building, but pretty sure this was caused by
8bff3ec76b.

Since above commit, the Z axis of the View orientation was not negated
by default anymore.
This was then being accounted for in `applyRotation` (but not
`applyNormalRotation`).

So to resolve, do the same in `applyNormalRotation` as in
`applyRotation` (so negate there).

Pull Request: https://projects.blender.org/blender/blender/pulls/128115
2024-09-25 13:22:06 +02:00
Lukas Tönne
2459247f9f GPv3: Enable selection operators and overlays in vertex paint mode
Vertex paint mode also supports masking based on selection, so the
selection overlay and relevant operators should also be enabled in that
mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/128114
2024-09-25 12:40:46 +02:00
Campbell Barton
01825a85cb Cleanup: quiet compiler warnings 2024-09-25 20:14:06 +10:00
Campbell Barton
8dcd51ddc3 Fix crash in recent fix for #128104 2024-09-25 19:37:20 +10:00
Lukas Tönne
6c5b5a7683 Cleanup: formatting. 2024-09-25 11:32:12 +02:00
Campbell Barton
0e08e8bf2d Cleanup: add missing CMake headers, update "check_cmake" config 2024-09-25 19:24:21 +10:00
Campbell Barton
840c65f442 Cleanup: spelling in comments 2024-09-25 19:24:20 +10:00
Campbell Barton
c3b11fbfae Cleanup: correct outdated code comment 2024-09-25 19:24:18 +10:00
Lukas Tönne
59ac6074b7 Fix #128104: Selection operator poll function broken
The poll function was accidentally changed to return false when no
object is selected or the active object is not one of the special types
checked by the function. Reverted to return true in those cases.

Pull Request: https://projects.blender.org/blender/blender/pulls/128110
2024-09-25 10:58:51 +02:00
Sybren A. Stüvel
407e18ed47 Anim: upgrade action group handling code to new API
Upgrade the handling of action groups in various areas to the new Layered
Actions API.

No functional changes for legacy Actions.

Ref: #123424

Pull Request: https://projects.blender.org/blender/blender/pulls/128088
2024-09-25 09:36:18 +02:00
Sybren A. Stüvel
02ebab57da Anim: add layered Action support to BKE_animdata_transfer_by_basepath
Add explicit handling of slots to `BKE_animdata_transfer_by_basepath()`,
and modernise the code to use the new API.

No functional changes for legacy Actions.

Ref: #123424

Pull Request: https://projects.blender.org/blender/blender/pulls/128088
2024-09-25 09:35:33 +02:00
Sybren A. Stüvel
4159f60e46 Anim: Layered Action support in group handling in action_mirror.cc
Use the `animrig::legacy::channel_groups_all()` function to get action
groups in a way that's compatible with both legacy and layered Actions.

No functional changes for legacy Actions.

Ref: #123424

Pull Request: https://projects.blender.org/blender/blender/pulls/128088
2024-09-25 09:35:30 +02:00