Commit Graph

108064 Commits

Author SHA1 Message Date
Campbell Barton
666ec966b9 Docs: improve code-comments for setup_app_data 2024-03-26 15:49:38 +11:00
Campbell Barton
099ff1a953 Cleanup: various non-functional C++ changes 2024-03-26 15:29:11 +11:00
Hans Goudey
fc0d8ba012 Cleanup: Remove C++ ifdef checks in C++ headers
Pull Request: https://projects.blender.org/blender/blender/pulls/119900
2024-03-26 04:56:03 +01:00
Hans Goudey
893130e6fe Refactor: Remove unnecessary C wrapper for GPUBatch class
Similar to fe76d8c946e5ce7a76d45acaee0a67407cb3b599

Pull Request: https://projects.blender.org/blender/blender/pulls/119898
2024-03-26 03:06:25 +01:00
Jacques Lucke
7314c86869 BLI: add fixed width integer type
This is intended to be used in the new exact mesh boolean algorithm by @howardt.
The new `BLI_fixed_width_int.hh` header provides types like `Int256` and
`UInt256` which are like e.g. `uint64_t` but with higher precision. The code
supports many different integer sizes.

The following operations are supported:
* Addition
* Subtraction
* Multiplication
* Comparisons
* Negation
* Conversion to and from other number types
* Conversion to and from string (based on `GMP`)

Division is not implemented. It could be implemented, but it's more complex and
is not required for the new mesh boolean algorithm.

Some alternatives to having a custom implementation have been discussed in
https://devtalk.blender.org/t/fixed-length-multiprecision-arithmetic/29189/.

Generally, the implementation is fairly straight forward. The main complexity is
the addition/multiplication algorithm which isn't too complicated. It's nice to
have control over this part as it allows us to optimize the code more if
necessary. Also, from what I understand, we might be able to benefit from some
special cases like multiplying a large integer with a smaller one.

I tried some different ways to optimize this already, but so far the normal
compiler optimization turned out to work best. Not sure if the same is true on
windows though, as it doesn't have native support for an `int128` which helps
the compiler understand what I'm doing. Alternatives I tried so far are using
intrinsics directly (mainly `_addcarry_u64` and similar), writing inline
assembly manually and copying the assembly output from the compiler. I assume
the assembly implementation didn't help for me because it prohibited other
compiler optimizations.

Pull Request: https://projects.blender.org/blender/blender/pulls/119528
2024-03-25 23:39:42 +01:00
Hans Goudey
1681e55114 Geometry Nodes: Add 8-bit integer attribute type to store attribute node
We already expose two other types that don't have a directly
corresponding socket type-- float2 and byte colors. This also solves
the inability to write to the nurbs_order attribute in geometry nodes.

Fixes #119843

Pull Request: https://projects.blender.org/blender/blender/pulls/119879
2024-03-25 23:04:11 +01:00
Hans Goudey
ef22826a3c Cleanup: Remove non-creatable option for builtin attributes
This was necessary when attributes were stored embedded in legacy
structs like `MPoly`. Nowadays that isn't the case anymore, and there
doesn't seem to be a reason to restrict the creation of attributes.
2024-03-25 17:05:39 -04:00
Hans Goudey
a6d4845899 Merge branch 'blender-v4.1-release' 2024-03-25 16:58:33 -04:00
Hans Goudey
ccb416322c UI: Add XYZ labels to Set Curve Normal node vector input 2024-03-25 16:58:29 -04:00
Hans Goudey
aa9bfc1b2a Fix: Uninitialized attribute memory read after recent commit
update_on_change_ shouldn't be called when creating an attribute but
not setting the array values. In that case it is UB to not set the values
elsewhere anyway, and that will cause its own update tag.
2024-03-25 16:58:21 -04:00
Hans Goudey
40a5e739e2 Fix #119873: Bake node crash with instanced light objects
4d0936c7d74bee32cd50 explicitly avoids turning non-geometry object
instances into geometry instances. This code is called to prepare
geometry sets for baking, and baking currently assumes that the baked
instances are always geometry sets.

To fix this, just check the instance type and serialize an empty
geometry set for the crashing object instance case. Compared to before
the crash causing commit, there is no change in behavior, since that
would have created empty geometry sets too.

Pull Request: https://projects.blender.org/blender/blender/pulls/119892
2024-03-25 21:42:07 +01:00
Hans Goudey
04bcd17dc8 Cleanup: Remove unnecessary builtin attribute provider logic
All builtin attributes are now stored as named attributes, so the old
code path from where they were stored with non-generic types can be
removed. The stored type and attribute type don't have to be tracked
separately anymore either.
2024-03-25 16:01:36 -04:00
Hans Goudey
11afa15361 Revert "Fix #119508: Missing update after "Shade Flat" operator"
This reverts commit 130701763bdb9e104486c9fd789cf128af68d9d5.

73cc27b988420d1ee10aaab808e57947dad55bbd made this unnecessary.
2024-03-25 15:50:27 -04:00
Hans Goudey
73cc27b988 Fix #119886: Set curve node missing normals update tag
The change to use generic "capture field on geometry" utilities for this
node and other nodes like it means `AttributeWriter` with its update
tagging isn't being used anymore, the attribute is just being created
with the new values (for some cases anyway). To fix this, call the
attribute provider's update function when creating the attribute too.
This was noted as useful in 130701763bdb9e104486 too.

The initialization of curve and point cloud runtime structs is moved
because they now have to be allocated before any attributes are added.
2024-03-25 15:49:25 -04:00
Sergey Sharybin
565dc1f22b Merge branch 'blender-v4.1-release' 2024-03-25 18:15:05 +01:00
Sergey Sharybin
6c74d4af15 Fix #118555: Occasional incorrect compositor result with relative transform
In the tiled compositor ensure_delta() can be called from multiple threads,
but without any threading synchronization. This worked fine when the node
only supported absolute transform: multiple threads would do the same work
and assign delta to the same values.

With the addition of relative transform in #115947 a code which adjusts
previously calculated delta was added, leading to possible double-applying
relative transform.

The solution is to avoid multiple threads modifying the same data by using
a double-locked check.

This issue does not happen in 4.2 (main branch) because it switched to full
frame compositor, which works differently.

Pull Request: https://projects.blender.org/blender/blender/pulls/119883
2024-03-25 18:13:38 +01:00
Thomas Dinges
26caa18173 Release: Bump to 4.1 release 2024-03-25 18:08:02 +01:00
5ff8738dce Cleanup: Anim, reduce indentation in ANIM_animdata_filter
Return early if possible, reducing cognitive complexity.

No functional changes.
2024-03-25 15:26:27 +01:00
Jacques Lucke
6b5a97170c Geometry Nodes: allow overriding bake settings on overridden object
Previously, the bake settings in geometry nodes were not
editable even though they were stored on the overridden
object (instead of the not-overridden but linked node tree).

Pull Request: https://projects.blender.org/blender/blender/pulls/119874
2024-03-25 14:58:45 +01:00
Charles Wardlaw
23fab6b6a6 Fix #99114: USD: Cache file operators now recognize USD as well as Alembic
USD files are now findable from the cachefile.open() and
cachefile.layer_add() operators.  Removed the ".abc" appending when
looking for a file for the first time, as it no longer makes sense.

Pull Request: https://projects.blender.org/blender/blender/pulls/118685
2024-03-25 14:50:59 +01:00
Hans Goudey
aede88be85 Fix: Curves NURBS order attribute validate incorrect clamp 2024-03-25 09:28:53 -04:00
Omar Emara
fa3e47523e Compositor: Port GLSL SMAA to CPU compositor
This patch ports the GLSL SMAA library to the CPU compositor in order to
unify the anti-aliasing behavior between the CPU and GPU compositor.
Additionally, the SMAA texture generator was removed since it is now
unused.

Previously, we used an external C++ library for SMAA anti-aliasing,
which is itself a port of the GLSL SMAA library. However, the code
structure and results of the library were different, which made it quite
difficult to match results between CPU and GPU, hence the decision to
port the library ourselves.

The port was performed through a complete copy of the library to C++,
retaining the same function and variable names, even if they are
different from Blender's naming conversions. The necessary code changes
were done to make it work in C++, including manually doing swizzling
which changes the code structure a bit.

Even after porting the library, there were still major differences
between CPU and GPU, due to different arithmetic precision. To fix this
some of the bilinear samplers used in branches and selections were
carefully changed to use point samplers to avoid discontinuities around
branches, also resulting in a nice performance improvement. Some slight
differences still exist due to different bilinear interpolation, but
they shall be looked into later once we have a baseline implementation.

The new implementation is slower than the existing implementation, most
likely due to the liberal use of bilinear interpolation, since it is
quite cheap on GPUs and the code even does more work to use bilinear
interpolation to avoid multiple texture fetches, except this causes a
slow down on CPUs. Some of those were alleviated as mentioned in the
previous section, but we can probably look into optimizing it further.

Pull Request: https://projects.blender.org/blender/blender/pulls/119414
2024-03-25 14:21:00 +01:00
Omar Emara
4971b144a4 Compositor: Unify sRGB to Linear between CPU and GPU
This patch unifies the sRGB to Linear color space conversion between the
CPU and GPU compositors. This is because CPU uses an optimized path that
produces values that are very slightly off. To fix this, for the GPU, we
do the conversion CPU side instead of doing it in a shader. Since images
are cached, the performance implications are not significant.

Another added benefit is that we no longer get differences due to the
order of alpha pre-multiplication and sRGB conversion, demonstrated in
#114305. And we no longer require any preprocessing of the images.

This patch adds some new utilities to the Image Buffer module to assign
float, byte, and compressed buffers along with their color spaces. It
also adds an ownership flag to compressed data. Those were added as a
way to facilitate the implementation.

Pull Request: https://projects.blender.org/blender/blender/pulls/118624
2024-03-25 14:09:54 +01:00
Pratik Borhade
209db414e0 Fix #119860: Undo crash in asset browser poll function
`asset_lib` is null when calling undo in active file browser space.
This causes crash in `asset undo poll`. So exit out of the poll function
when active file space is filebrowser.

Pull Request: https://projects.blender.org/blender/blender/pulls/119870
2024-03-25 14:00:38 +01:00
Pratik Borhade
f6190dcf9f Merge branch 'blender-v4.1-release' 2024-03-25 18:28:23 +05:30
Pratik Borhade
436b9a5aae Fix #119862: poly build crash when adding first vertex in empty geometry
object_index is not found (-1) when all mesh data is deleted hence it
crashes when accessing base from the vector at index -1.
So skip the further execution to prevent crash.

Pull Request: https://projects.blender.org/blender/blender/pulls/119865
2024-03-25 13:55:57 +01:00
Germano Cavalcante
f66cb1e635 UI: rename 'Snap With' and 'Snap To' to 'Snap Base' and 'Snap Target'
Since the `Set Snap Base` feature has been implemented, it would be
convenient to reflect the use of the term `Snap Base` in other areas in
the UI.

Pull Request: https://projects.blender.org/blender/blender/pulls/119723
2024-03-25 13:35:52 +01:00
Hans Goudey
b1c85fa78c Fix: Python import error for GPUVertBuf
Caused by fe76d8c946e5ce7a76d45acaee0a67407cb3b599
2024-03-25 08:10:48 -04:00
Campbell Barton
ab93a426a0 Fix assert from recent cleanup
Change from [0] didn't account for edit-meshes without faces.

[0]: 3805974b6fa8e15ae4409f597747bc7beee51fa3
2024-03-25 22:28:53 +11:00
Pratik Borhade
2e8259e4d4 GPv3: Clean loose points in draw mode menu
Include `clean loose` operator in draw mode menu.
And move this operator inside `Cleanup menu` (same as GPv2)

Pull Request: https://projects.blender.org/blender/blender/pulls/119782
2024-03-25 12:17:03 +01:00
Aras Pranckevicius
26337b9fb4 Metal: implement support for compressed textures
Noticed lack of it via #119793. Now DDS images using BC1/BC2/BC3
(aka DXT1/DXT3/DXT5) formats can keep on being GPU compressed
on Metal too, just like e.g. on OpenGL.

Pull Request: https://projects.blender.org/blender/blender/pulls/119835
2024-03-25 11:40:20 +01:00
Sergey Sharybin
7e2d54e786 Fix: Assert when exiting Metal rendered viewport
This commit fixes the following assert:
  mtl_command_buffer.mm:165, submit(), at 'MTLBackend::get()->is_inside_render_boundary()'

It happens when toggling rendered state of viewport on macOS, and is
caused by incorrect order of setting active GPU context to null and
calling GPU_render_end.

This change makes the flow of GPU_render_{beign, end} and GPU context
activation closer to what it is in the draw manager's functions
DRW_render_context_{enable, disable}.

Pull Request: https://projects.blender.org/blender/blender/pulls/119868
2024-03-25 11:28:28 +01:00
8f015d3bfc Modeling: Merge Vertices, correct spelling of report
Fix the "Merge Vertices" report, replacing "vertice(s)" with either
"vertex" or "vertices". The singular "vertice" is not a word in English,
and thus the regular "append (s)" approach is incorrect.

Pull Request: https://projects.blender.org/blender/blender/pulls/119863
2024-03-25 10:18:13 +01:00
Lukas Stockner
05a9f96446 Fix: Add missing callback reset in RE_InitRenderCB
This caused an ASan abort while looking into #101993.

From what I can tell, the issue is that when you click the render button on
the Render Layer node, RENDER_OT_render sets the callback. Then, when you
hit F12 later, it reuses the Render from before, including the callback,
but the corresponding handle has been freed already.
2024-03-25 01:38:55 +01:00
Harley Acheson
b545770f5c UI: Adjustments to Minimum Area Sizes
When areas are dragged very small we want the (visual) vertical minimum
to equal header height, and the horizontal minimum to be equal to the
Properties nav area width. This PR just makes these adjust correctly
with changes of resolution scale and line width.

Pull Request: https://projects.blender.org/blender/blender/pulls/119848
2024-03-24 19:40:18 +01:00
Hans Goudey
b54d9875ba Fix: Another Metal build error after recent refactor
Sorry for the noise, I misread the output from the PR build.
2024-03-24 13:24:03 -04:00
Hans Goudey
aa87b747c5 Fix: Additional macOS metal build error 2024-03-24 12:37:36 -04:00
Hans Goudey
e201b5e553 Fix: Debug build error after previous commit 2024-03-24 12:17:44 -04:00
Hans Goudey
fe76d8c946 Refactor: Remove unnecessary C wrappers for vertex and index buffers
Now that all relevant code is C++, the indirection from the C struct
`GPUVertBuf` to the C++ `blender::gpu::VertBuf` class just adds
complexity and necessitates a wrapper API, making more cleanups like
use of RAII or other C++ types more difficult.

This commit replaces the C wrapper structs with direct use of the
vertex and index buffer base classes. In C++ we can choose which parts
of a class are private, so we don't risk exposing too many
implementation details here.

Pull Request: https://projects.blender.org/blender/blender/pulls/119825
2024-03-24 16:38:30 +01:00
Hans Goudey
84c6ead74b Refactor: Remove unnecessary curves GPU evaluation caches
Currently we have a cache for all combinations of "strand/strip" and
the four subdivision levels. Recomputing this data should be very fast
and doesn't require re-uploading data from the CPU. Because they are
scene settings, they will be the same for all render engines too, so we
won't have a case where we're constantly requesting different values.

The extra caches just complicate code, so better to remove them. Now
the final evaluated cache remembers the settings it was created with,
and it's cleared if they are changed.

Pull Request: https://projects.blender.org/blender/blender/pulls/119804
2024-03-24 16:33:12 +01:00
Casey Bianco-Davis
cb453a5846 Fix: Debug crash upon entering edit mode.
Any valid object gets added to `object_data` so we should check if it is not empty rather then is empty.

Pull Request: https://projects.blender.org/blender/blender/pulls/119839
2024-03-24 13:11:01 +01:00
Iliya Katueshenock
9123451427 Cleanup: BLI: Redundant dereference
Redundant dereference of array element.
This code is not used currently, but i noticed issue
while using this in my branch.

Pull Request: https://projects.blender.org/blender/blender/pulls/119842
2024-03-24 11:07:00 +01:00
John Swenson
af0c42e266 Fix #118260: VSE scene strip wireframe display
The issue is that a draw call in the sequencer does not have any
knowledge of the viewport's wireframe opacity and threshold settings,
defaulting both to 0.

A similar issue #86956 implemented a quick hack to fix grease pencil
shading in VSE, so I opted to do the same here. In the future, a better
solution could be implemented to preserve the entire v3d.overlay.

I should note that I made `wireframe_threshold = 0.5f` to match the
default value given in `versioning_280.cc` but if this works better
as `1.0f` instead let me know.

Pull Request: https://projects.blender.org/blender/blender/pulls/119811
2024-03-24 08:52:47 +01:00
Hans Goudey
3805974b6f Refactor: Use C++ array for edit mesh looptris
Pull Request: https://projects.blender.org/blender/blender/pulls/119829
2024-03-23 17:43:38 +01:00
Hans Goudey
3ce8c74a57 Cleanup: Fix outdated comments about Mesh data 2024-03-23 11:47:07 -04:00
Hans Goudey
374b80b84a Cleanup: Miscellaneous cleanups to newly C++ headers 2024-03-23 10:10:52 -04:00
Hans Goudey
1dc16f909d Cleanup: Move GPU Python headers to C++ 2024-03-23 10:06:45 -04:00
Hans Goudey
a54c9b9e36 Cleanup: Move eevee_private.h to C++ 2024-03-23 09:59:23 -04:00
Hans Goudey
5cd1237594 Cleanup: Miscellaneous cleanups to newly C++ headers
Pull Request: https://projects.blender.org/blender/blender/pulls/119824
2024-03-23 14:52:00 +01:00
Hans Goudey
a099061feb Cleanup: Move remaining draw headers to C++ 2024-03-23 14:51:59 +01:00