Commit Graph

140097 Commits

Author SHA1 Message Date
Campbell Barton
da94978cc4 Cleanup: format 2024-08-15 21:26:12 +10:00
Campbell Barton
b5e0b59736 Cleanup: remove space around identifiers in C-style comments 2024-08-15 20:46:00 +10:00
Anthony Roberts
b664ece0fe Build: Upgrade sse2neon
Pull Request: https://projects.blender.org/blender/blender/pulls/126237
2024-08-15 12:31:26 +02:00
Jacques Lucke
bb8460da9e Tests: support generating code coverage report
This only works with GCC and has only been tested on Linux. The main goal is to
automatically generate the code coverage reports on the buildbot and to publish
them. With some luck, this motivates people to increase test coverage in their
respective areas. Nevertheless, it should be easy to generate the reports
locally too (at least on supported software stacks).

Usage:
1. Create a **debug** build using **GCC** with **WITH_COMPILER_CODE_COVERAGE**
   enabled.
2. Run tests. This automatically generates `.gcda` files in the build directory.
3. Run `make/ninja coverage-report` in the build directory.

If everything is successful, this will open a browser with the final report
which is stored in `build-dir/coverage/report/`. For a bit more control one can
also run `coverage.py` script directly. This allows passing in the
`--no-browser` option which may be benefitial when running it on the buildbot.
Running `make/ninja coverage-reset` deletes all `.gcda` files which resets the
line execution counts.

The final report has a main entry point (`index.html`) and a separate `.html`
file for every source code file that coverage data was available for. This also
contains some code that is not in Blender's git repository. We could filter
those out, but it also seems interesting (to me anyway), so I just kept it in.

Doing the analysis and writing the report takes ~1 min. The slow part is running
all tests in a debug build which takes ~12 min for me. Since the coverage data
is fairly large and the report also includes the entire source code, file
compression is used in two places:
* The intermediate analysis results for each file are stored in compressed zip
  files. This data is still independent from the report html and could be used
  to build other tools on top of. I could imagine storing the analysis data for
  each day for example to gather greater insights into how coverage changes over
  time in different parts of the code.
* The analysis data and source code is compressed and base64 encoded embedded
  into the `.html` files. This makes them much smaller than embedding the data
  without compression (5-10x).

Pull Request: https://projects.blender.org/blender/blender/pulls/126181
2024-08-15 12:17:55 +02:00
Falk David
ed3c16624b GPv3: High level python API
This extends the `GreasePencilDrawing` rna type using python.
The goal is to add an API that allows developers to transition to
the new grease pencil API a bit more smoothly.

Adds the following endpoints to the `GreasePencilDrawing`:
* `drawing.strokes`: Returns a list/slice of `GreasePencilStroke`s in the drawing.

Adds a python class `GreasePencilStroke`:
* `stroke.points`: Returns a list/slice of `GreasePencilStrokePoint`s.
* Getters/Setters of attributes for this stroke:
   * `stroke.cyclic`
   * `stroke.material_index`
   * `stroke.select`
   * `stroke.softness` (used to be `hardness`)
   * `stroke.start_cap`
   * `stroke.end_cap`
   * `stroke.curve_type`: The type of curve: `POLY`,`BEZIER`,`CATMULL_ROM`,`NURBS`.
   * `stroke.aspect_ratio`
   * `stroke.fill_opacity`
   * `stroke.fill_color`
   * `stroke.time_start`
* High-level functions:
   * `stroke.add_points(count)`: Adds `count` points at the end of the stroke.
  * `stroke.remove_points(count)`: Removes `count` points from the end of the stroke. Note that this will not remove the stroke if the count is greater than the number of points in the stroke. A stroke has at least 1 point. Removing strokes can be done from the drawing.

Adds a python class `GreasePencilStrokePoint`:
* Getters/Setters of attributes for this point:
   * `position`
   * `radius`
   * `opacity`
   * `select`
   * `vertex_color`
   * `rotation`
   * `delta_time`

Note that `GreasePencilStroke` and `GreasePencilStrokePoint` are not stored in the file and don't have an RNA API. This means that they are not compatible with e.g. `layout.prop`.

This API should not be used for performance critical code. It's likely
even slower than the python API from 4.2.

There will be migration documentation for addon developers here:
https://developer.blender.org/docs/release_notes/4.3/grease_pencil/#python-api-changes

Pull Request: https://projects.blender.org/blender/blender/pulls/125599
2024-08-15 10:58:21 +02:00
Jacques Lucke
a8667aa03f Core: introduce MemoryCounter API
We often have the situation where it would be good if we could easily estimate
the memory usage of some value (e.g. a mesh, or volume). Examples of where we
ran into this in the past:
* Undo step size.
* Caching of volume grids.
* Caching of loaded geometries for import geometry nodes.

Generally, most caching systems would benefit from the ability to know how much
memory they currently use to make better decisions about which data to free and
when. The goal of this patch is to introduce a simple general API to count the
memory usage that is independent of any specific caching system. I'm doing this
to "fix" the chicken and egg problem that caches need to know the memory usage,
but we don't really need to count the memory usage without using it for caches.
Implementing caching and memory counting at the same time make both harder than
implementing them one after another.

The main difficulty with counting memory usage is that some memory may be shared
using implicit sharing. We want to avoid double counting such memory. How
exactly shared memory is treated depends a bit on the use case, so no specific
assumptions are made about that in the API. The gathered memory usage is not
expected to be exact. It's expected to be a decent approximation. It's neither a
lower nor an upper bound unless specified by some specific type. Cache systems
generally build on top of heuristics to decide when to free what anyway.

There are two sides to this API:
1. Get the amount of memory used by one or more values. This side is used by
   caching systems and/or systems that want to present the used memory to the
   user.
2. Tell the caller how much memory is used. This side is used by all kinds of
   types that can report their memory usage such as meshes.

```cpp
/* Get how much memory is used by two meshes together. */
MemoryCounter memory;
mesh_a->count_memory(memory);
mesh_b->count_memory(memory);
int64_t bytes_used = memory.counted_bytes();

/* Tell the caller how much memory is used. */
void Mesh::count_memory(blender::MemoryCounter &memory) const
{
  memory.add_shared(this->runtime->face_offsets_sharing_info,
                    this->face_offsets().size_in_bytes());

  /* Forward memory counting to lower level types. This should be fairly common. */
  CustomData_count_memory(this->vert_data, this->verts_num, memory);
}

void CustomData_count_memory(const CustomData &data,
                             const int totelem,
                             blender::MemoryCounter &memory)
{
  for (const CustomDataLayer &layer : Span{data.layers, data.totlayer}) {
    memory.add_shared(layer.sharing_info, [&](blender::MemoryCounter &shared_memory) {
      /* Not quite correct for all types, but this is only a rough approximation anyway. */
      const int64_t elem_size = CustomData_get_elem_size(&layer);
      shared_memory.add(totelem * elem_size);
    });
  }
}
```

Pull Request: https://projects.blender.org/blender/blender/pulls/126295
2024-08-15 10:54:21 +02:00
Sean Kim
f0c2d4eeed Cleanup: Add int8_t specifier to ED_grease_pencil.hh enum classes
Since these enums won't have more than 255 values, add the `int8_t` specifier.

Pull Request: https://projects.blender.org/blender/blender/pulls/126326
2024-08-15 10:15:06 +02:00
Christoph Lendenfeld
0f5dd1c55c Refactor: pose_utils.cc
No functional changes expected.

This PR refactors the code by:
* passing things by reference if they cannot be a `nullptr`
* Managing indentation by returning early or continuing.
* Cleaning up comments
* Indicating ListBase element types in the declaration

This is in service of #126125 for which the `get_item_transform_flags`
needs to be passed a slot handle as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/126291
2024-08-15 09:47:14 +02:00
Jeroen Bakker
00be586a82 Fix #124565: EEVEE Environment Render Pass
There were a couple of regressions when using the environment render
pass.

- Not working when film transparency was enabled
- Deferred geometry didn't occlude the background

This PR splits the world background shader (eevee_surf_world) into two
shaders. One clears background and render passes and a second one that renders
the background and the environment render pass.

The second shader is moved after the deferred pipeline and an early
depth test is used to occlude the background and environment pass.

NOTE: render test reference images needs to be updated.
Pull Request: https://projects.blender.org/blender/blender/pulls/126274
2024-08-15 08:58:41 +02:00
Jeroen Bakker
925753c83b Fix #125618: EEVEE: Cryptomatte Material Layer Incorrect
Missing oversight in previous fix where incorrect name size where
used to generate the cryptomatte hash.

Pull Request: https://projects.blender.org/blender/blender/pulls/126352
2024-08-15 08:41:12 +02:00
YimingWu
04c5a9f053 Fix #126136: Show GUI message box for unsupported GPUs on X11
On X11 windowing systems there's no `MessageBox` prompt like on
win32 that could show users that they have unsupported GPUs,
this leads to confusion to them as they typically don't open
blender from a command line so none of the messages could be
available. This patch utilizes `system->showMessageBox` to display
a GUI message box telling the user that the GPU is unsupported.

Pull Request: https://projects.blender.org/blender/blender/pulls/126220
2024-08-15 08:37:03 +02:00
Campbell Barton
74fae7f943 Presets: remove poll functions that scan the file-system
The poll functions for theme & key-map preset operators used functions
documented not to be used on redraw draw and could make the interface
slow when extensions (for example) are stored on a network file-system.

While the file-system lookups are typically cached, it can still cause
occasional stuttering or hanging. In general scanning the file-system
on poll should be avoided.
2024-08-15 16:06:17 +10:00
Campbell Barton
9e09351b5b Fix active theme behavior when adding/removing themes
Regression in [0] which displays the filename for the active
theme but still used the label internally.

This meant actions such as removing the theme would not always apply
to the name being displayed.

- Adding a new theme was not setting it active.
- Detecting if a theme was built-in used the run-time label as a lookup.
- Theme removal first require it to be re-selected.

[0]: 0bb6317035
2024-08-15 16:06:13 +10:00
Campbell Barton
9f931ee3d2 Presets: consider presets within the extensions repo to be "built-in"
It was possible to remove a preset defined within an extension,
the only way to restore it was to uninstall & re-install the extension.
2024-08-15 16:06:11 +10:00
Campbell Barton
f42713ab1d Fix unhandled permissions exception in bpy.utils.is_path_builtin
An excepting would be raised when the parent/child paths didn't
have permissions to access.
2024-08-15 16:06:10 +10:00
Campbell Barton
5f9be675f0 Cleanup: move bpy.utils parent-path check into a function 2024-08-15 16:06:08 +10:00
Hans Goudey
6ca352a7b6 Refactor: Sculpt: Remove mesh pointer from BVH tree, pass to drawing code
Part of #118145.
Similar in concept to recent commits removing the usage of
this mesh pointer in favor of fetching the data as necessary.
Also see recent discussion in a recent fix for this area:
https://projects.blender.org/blender/blender/pulls/122850.

And also note the comment for `Tree::mesh_` was incorrect.
The mesh was the original mesh, not the evaluated mesh.
2024-08-15 00:24:12 -04:00
Hans Goudey
b7cbe4d959 Refactor: Sculpt: Pass object instead of SculptSession to vertex access
Part of #118145.
This makes it possible to remove the vertex position array from
the sculpt BVH tree.
2024-08-15 00:17:44 -04:00
Hans Goudey
ae8ecd6e4e Cleanup: Remove unused variables 2024-08-15 00:00:44 -04:00
Hans Goudey
0c0a9d7714 Cleanup: Remove unused variables 2024-08-14 23:58:07 -04:00
Hans Goudey
9a776830a6 Refactor: Sculpt: Reduce usage of BVH tree positions array
In preparation for removing the positions array from the BVH tree
and just retrieving the evaluated or original positions as necessary.
2024-08-14 23:27:20 -04:00
Hans Goudey
bd19212fb8 Refactor: Sculpt: Avoid BVH tree geometry pointers in normals update
Part of #118145.
There is some complexity in this area because the normals need to be
updated on the original geometry only when there is no deformation
or multires modifier. The simplest way to encapsulate that usage of
the original geometry for now was adding a separate function that
contains the lookup with a comment justifying it.
2024-08-14 23:19:39 -04:00
Hans Goudey
0abf1b32b2 Refactor: Sculpt: Specialize face set fair selection filtering
Part of #118145.
2024-08-14 23:19:39 -04:00
Hans Goudey
561d035da4 Cleanup: Follow class layout style guide for SculptSession 2024-08-14 23:19:39 -04:00
Sean Kim
a0e6e16da5 Refactor: Various changes to SCULPT_OT_mask_by_color
* Removes usage of `PBVHVertRef` in favor of `int` since the operator
  only works on Mesh
* Removes calls to Multires and BMesh code that have no effect
* Inline floodfill algorithm

Pull Request: https://projects.blender.org/blender/blender/pulls/126258
2024-08-15 04:52:12 +02:00
Sean Kim
712d322335 Refactor: Sculpt: Add automask factor raw pointer overload
The automask cache is not guaranteed to exist for a given tool type,
instead of forcing developers to remember to guard the dereference with
a null check, this commit adds an inline overload that performs the
check for the user on a raw pointer. The API takes in pointers instead
of smart pointers as this method is not intended to take ownership of
the pointer into consideration.

Pull Request: https://projects.blender.org/blender/blender/pulls/126346
2024-08-15 04:47:24 +02:00
Hans Goudey
73e1fa181e Cleanup: Formatting 2024-08-14 21:10:04 -04:00
Hans Goudey
6703927a05 Refactor: Sculpt: Retrieve positions instead of using BVH tree reference
Part of #118145.
2024-08-14 21:10:04 -04:00
Sean Kim
a3a0a848a8 Fix #126330: Crash when using Color Filter
Pull Request: https://projects.blender.org/blender/blender/pulls/126332
2024-08-15 01:33:48 +02:00
Richard Antalik
717b8c08f3 Fix #125401: Crash when enabling prefetching
Prefetching thread attempted to render scene strip inside of meta strip,
because `channels` argument was incorrectly set to top-level channels.

Pull Request: https://projects.blender.org/blender/blender/pulls/126092
2024-08-14 22:36:11 +02:00
Hans Goudey
27bc773c0b Cleanup: Formatting 2024-08-14 14:20:43 -04:00
Hans Goudey
e04707bf2a Cleanup: Sculpt: Remove last usage of PBVHVertRef visibility function
Pat of #118145.
2024-08-14 14:10:32 -04:00
Hans Goudey
70a24258c6 Sculpt: Remove unused positions array copy with some deform modifiers
Last usage was removed in 0250596f5b.
2024-08-14 14:10:32 -04:00
Jesse Yurkovich
92d935a205 Build: Ambiguous call to isfinite for MSVC 17.11
Overload resolution must have changed and is causing issues for one
particular code path attempting to use `isfinite(ccl::uchar)`.
Compiler output attached.

It turns out that the code in question can be simplified to just remove
the ambiguity because only the float codepath wants to check for finite
values.

----
Reduced repro: https://godbolt.org/z/YWz3Yc3x8

Pull Request: https://projects.blender.org/blender/blender/pulls/125348
2024-08-14 19:52:48 +02:00
Sean Kim
e7787f24aa Refactor: Simplify boundary::preview_data_init parameters
* Since displaying this information will only ever happen based on the
  active vert, remove the parameter and fetch it inside the function
* Remove the `PBVHVertRef` usage in favor of `ActiveVert`

Pull Request: https://projects.blender.org/blender/blender/pulls/126256
2024-08-14 19:35:03 +02:00
Hans Goudey
93054f9a0e Refactor: Sculpt: Move original position restore to brush deform step
Instead of running a separate loop before processing the brush
deformation, undo the translations from the previous brush steps
when applying the translation. Avoiding this separate loop over
all geometry should improve performance.
2024-08-14 11:53:16 -04:00
Alaska
3cd26916f4 Cycles render test: Enable OIDN tests
OIDN tests were temporarily disabled as platforms were updating to
OIDN 2.3. Now that the update is done, re-enable OIDN tests.

Pull Request: https://projects.blender.org/blender/blender/pulls/126214
2024-08-14 17:15:36 +02:00
Alaska
1330d0ddda Cycles render tests: Add the option to test with OSL enabled
This commit adds a new cmake variable `WITH_CYCLES_TEST_OSL`
that runs every Cycles test a second time with OSL enabled.

At the moment only CPU OSL is enabled. There are plans to enable
OptiX OSL in the future when stability issues with OptiX OSL
have been resolved.

Some render tests have been blocked from running until we can figure
out a fix. The most notiable being all the Pricincipled BSDF tests
as some of them are failing due to noise differences.

Ref #123012

Pull Request: https://projects.blender.org/blender/blender/pulls/124601
2024-08-14 17:00:48 +02:00
Hans Goudey
658b32093a Refactor: Sculpt: Replace sculpt attribute system for dynamic topology data
Part of #118145.
Use the BMesh functions instead of the sculpt attribute API which we
intend to remove.
2024-08-14 10:25:52 -04:00
Hans Goudey
d065d54972 Fix: Missing sculpt overlays for dynamic topology
Caused by 9eb7e8bfd1.
2024-08-14 10:24:16 -04:00
Hans Goudey
e612260f5c Refactor: Sculpt: Replace sculpt attribute system for persistent base data
Part of #118145.
Use the mesh attribute API instead of the sculpt attribute API which we
intend to remove.
2024-08-14 10:13:37 -04:00
Sergey Sharybin
a4fff6cd66 Libs: sse2neon: update to the newer version
Addresses compilation issue with clang-cl on WoA.

Ref #126237
2024-08-14 16:08:35 +02:00
Aras Pranckevicius
df00c30fcd Fix #126201: Video artifacts when rendering into ffmpeg with PNG codec
Started happening with 422dd9404f that introduced multi-threaded
conversions of src->dst (usually RGBA->YUV) format before encoding
the frame with ffmpeg. But the issue itself is not related to
multi-threading, but rather with the fact that AVFrame objects
started to be backed by an AVBuffer object (as that is needed for
threaded swscale to work).

Turns out, if a frame is backed by AVBuffer object, said buffer
might become "non writable" because it got shared (non-1 refcount).
And that happens with some ffmpeg video codecs, particularly PNG one.

Make sure to make the AVFrame objects writable inside
generate_video_frame. This follows official ffmpeg example
(doc/examples/encode_video.c) that explains why that is needed:

"the codec may have kept a reference to the frame in its internal
structures, that makes the frame unwritable. av_frame_make_writable()
checks that and allocates a new buffer for the frame only if necessary"

Pull Request: https://projects.blender.org/blender/blender/pulls/126317
2024-08-14 16:07:11 +02:00
Hans Goudey
7d08d6be6a Fix #126013: Geometry nodes PLY import node skips attributes
Just turn on the option for geometry nodes where attributes are
generally expected to be used. We could expose this and other
options at some point too but that requires a bit more thought.
2024-08-14 08:43:06 -04:00
Thomas Dinges
d56196ad96 Tools: Update issues script after label rename from priority to severity 2024-08-14 14:42:04 +02:00
Omar Emara
075bdbcd63 Nodes: Improve isotropic Gabor noise UI controls
This patch improves the isotropic Gabor noise UI controls such that
variations happen in both directions of the base orientation, as opposed
to being biased in the positive direction only.

Thanks to Charlie Jolly for suggesting this improvement.
2024-08-14 15:26:03 +03:00
Omar Emara
ce89d7949c Nodes: Optimize Gabor noise variance estimation
This patch optimizes the Gabor noise standard deviation estimation by
computing the upper limit of the integral as the frequency approaches
infinity, since the integral is mostly constant for the relevant
frequency range. The limits are 0.25 for the 2D case and 1 / 4 * sqrt2
for the 3D case.

This also improves normalization for low frequencies, possibly due to
the effect of windowing.

Thanks to Charlie Jolly for spotting the optimization.
2024-08-14 14:27:23 +03:00
Pratik Borhade
8e771104d8 GPv3: Cursor panel not usable in paint modes
This is due to failing poll function. Use correct tool setting pointer
based on the active mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/126279
2024-08-14 13:26:00 +02:00
Sergey Sharybin
f1fe232e89 Cycles: Add parallel_reduce() to the ccl namespace
Currently unused, but is a good utility to have to make code
threaded in the future.
2024-08-14 12:33:40 +02:00
Sergey Sharybin
1fc6a5b9bd Fix #126108: Crash when EXR image is loaded in image list
Technically the regression was caused by #124472 which made it so
duplicating ImBuf allocates the exact amount of memory needed to
hold the pixels, while before IMB_dupImBuf() would leave the float
buffer over-allocated for images that are less than 4 channels per
pixel.

At the same time IMB_scalefastImBuf() was hard-coded to use 4
channels per pixels, for both byte and float buffers. It did not
crash in Blender 4.1 as it was accessing memory that is over-allocated,
but it also did not generate proper preview.

This fix makes the IMB_scalefastImBuf() to operate on an arbitrary
number of channels in the float buffer.

Pull Request: https://projects.blender.org/blender/blender/pulls/126234
2024-08-14 11:34:29 +02:00