Commit Graph

117289 Commits

Author SHA1 Message Date
Jeroen Bakker
c2695e2dcc Vulkan: Add support for legacy platforms
Dynamic rendering is a Vulkan 1.3 feature. Most platforms have support
for them, but there are several legacy platforms that don't support dynamic
rendering or have driver bugs that don't allow us to use it.

This change will make dynamic rendering optional allowing legacy
platforms to use Vulkan.

**Limitations**

`GPU_LOADACTION_CLEAR` is implemented as clear attachments.
Render passes do support load clear, but adding support to it would
add complexity as it required multiple pipeline variations to support
suspend/resume rendering. It isn't clear when which variation should
be used what lead to compiling to many pipelines and branches in the
codebase. Using clear attachments doesn't require the complexity
for what is expected to be only used by platforms not supported by
the GPU vendors.

Subpass inputs and dual source blending are not supported as
Subpass inputs can alter the exact binding location of attachments.
Fixing this would add code complexity that is not used.

Ref: #129063

**Current state**

![image](/attachments/9ce012e5-2d88-4775-a636-2b74de812826)

Pull Request: https://projects.blender.org/blender/blender/pulls/129062
2024-11-19 16:30:31 +01:00
Clément Foucault
8c87732454 Overlay-Next: Object Name
Overlay that display object name
2024-11-19 15:56:48 +01:00
YimingWu
07e197ba8c Fix #130453: Handle empty drawing for GPv3 in Overlay Next
`grease_pencil_edit_batch_ensure` will not create a valid batch when
there's no visible edit geometries (e.g. Current frame is before any of
the GPv3 key frames), this would lead to GPv3 passes drawing an empty
batch. This fix prevent empty edit batch from being put in the pass
drawing command list.

Pull Request: https://projects.blender.org/blender/blender/pulls/130493
2024-11-19 15:47:48 +01:00
Clément Foucault
ee05765cc1 Fix: Overlay-Next: Do not draw object center on duplis
Also centralize instance these check into utility function.
2024-11-19 15:20:16 +01:00
Jacques Lucke
4ae1ca34a3 BLI: support constructing Map with items
This adds support for constructing a `Map` directly from key-value-pairs.
If the same key exists multiple times, only the first one is taken into account.

Note: the keys and values are copied into the map (not moved). This is because
an `std::initializer_list` is read-only. If move-behavior is needed, it is better to
use the existing `map.add*` functions.

```cpp
Map<int, std::string> map = {{1, "where"}, {3, "when"}, {5, "why"}};
````

Pull Request: https://projects.blender.org/blender/blender/pulls/130470
2024-11-19 14:47:58 +01:00
Jacques Lucke
1125d6ee15 Cleanup: Attributes: rename AttributeKind to AttributeDomainAndType
There is not really a good definition for what an "attribute kind". There are
many possibilities, it could include domain, type, geometry type, default value,
usage, ...

So it's better not to use this generic name. With the current name, one always
has to look at the definition again to be sure what it contains and what it does
not.

The name `AttributeDomainAndType` is way more explicit and does not have the
same problems. It's a bit longer, but that does not seem to be a problem in the
places where we use it.

Pull Request: https://projects.blender.org/blender/blender/pulls/130505
2024-11-19 14:31:19 +01:00
Jacques Lucke
4da580236b Refactor: Attributes: split attribute accessors to separate files
Previously, the attribute accessor were defined in the `geometry_component_*.cc`
files. This made sense back in the day, because this attribute API was only used
through `GeometryComponent`. However, nowadays this attribute API is independent
of `GeometryComponent`. E.g. one can use `mesh.attributes()` without ever
creating a component.

The refactor contains the following changes:
* Move attribute accessors to separate files for each geometry type. E.g. from
  `geometry_component_mesh.cc` to `mesh_attributes.cc`.
* Move implementations of e.g. `Mesh::attributes()` to `mesh.cc`.
* Provide access to the `AttributeAccessorFunctions` without actually having a
  geometry. This will be useful to e.g. implement
  `attribute_is_builtin_on_component_type` without dummy components.

Pull Request: https://projects.blender.org/blender/blender/pulls/130516
2024-11-19 14:28:01 +01:00
Jeroen Bakker
a5f8dbe9b5 Fix: Incorrect assert introduced in recent commit 2024-11-19 13:59:09 +01:00
Falk David
c4febb68b8 Fix: Compiler warning
Introduced in 5d2405f6cd.
Forgot to remove the local variable.
2024-11-19 13:45:58 +01:00
Jeroen Bakker
8b9b67f2d3 Cleanup: Vulkan: Don't over-allocate render areas/viewports
In multiple parts (framebuffer and shader) the render areas/viewport could be
copied in an array of 16 structs, when only one is needed. This PR will use builder
patters so we don't over-allocate. Would spend less CPU cycles when constructing
render info, render passes/framebuffers, shaders.

Cleanup was part of !129062

Pull Request: https://projects.blender.org/blender/blender/pulls/130515
2024-11-19 13:40:12 +01:00
Jeroen Bakker
b9dab68ce2 Vulkan: Support clearing GPU_DATA_2_10_10_10_REV textures
Using floats to clear GPU_DATA_2_10_10_10_REV textures were not
supported. It will be needed to support legacy platforms.

Detected during development of !129062

Pull Request: https://projects.blender.org/blender/blender/pulls/130511
2024-11-19 13:39:36 +01:00
Jeroen Bakker
9ff98de6b4 Vulkan: Fix workbench XRay
XRay also uses depth only shaders, where the framebuffer has empty
attachment slots. This is not compatible with Vulkan render passes and
should be phased out.

Ref: !130258

Pull Request: https://projects.blender.org/blender/blender/pulls/130510
2024-11-19 13:38:58 +01:00
Jeroen Bakker
a499c711a9 Vulkan: Refactor descriptor set bindings
Shader interface used shader create info bind types to communicate bind
types to descriptor sets. However Vulkan supports more bind types than
Blender exposes in its API. Current implementation resulted that next to
the bind type the actual resource was queried to find out what needed to
be done.

This PR makes it more clear to convert the shader create info bind type
to `VKBindType` that contains the vulkan bind types we support.

Pull Request: https://projects.blender.org/blender/blender/pulls/130509
2024-11-19 13:38:13 +01:00
Jeroen Bakker
560c75e59c Cleanup: Vulkan: Remove unused code
Code is a left over and should not be used. It has been replaced by `VKResourceBinding`

Pull Request: https://projects.blender.org/blender/blender/pulls/130507
2024-11-19 13:35:47 +01:00
Jeroen Bakker
4018e52d30 GPU: OpenGL&Vulkan incorrect workarounds GLSL
OpenGL & Vulkan has workarounds when gl_Layer/gl_ViewportIndex isn't
supported. In this case a geometry shader will is generated. This
geometry shader doesn't follow the GLSL standard and doesn't work on
some platforms. This has not been an issue as the platforms that
don't support gl_Layer/gl_ViewportIndex don't show the issue.

According to the specs gl_Layer and gl_ViewportIndex should be set for
each call to EmitVertex. A shader should not rely on that EmitVertex
reuses the same memory.

Ref https://www.khronos.org/opengl/wiki/Geometry_Shader#Layered_rendering
```
Warning: gl_Layer and gl_ViewportIndex are GS output variables. As such, every time
you call EmitVertex, their values will become undefined. Therefore, you must set
these variables every time you loop over outputs.
```

Issue detected during development of !129062

Pull Request: https://projects.blender.org/blender/blender/pulls/130506
2024-11-19 13:35:09 +01:00
Falk David
5d2405f6cd Fix: Grease Pencil: Double drawing user increment
The `add_layers_with_empty_drawings_for_eval` function incremented the
user count of the drawings twice because `add_empty_drawings` creates
drawings with one user.

Pull Request: https://projects.blender.org/blender/blender/pulls/130514
2024-11-19 12:52:15 +01:00
Pratik Borhade
26c6c8ff98 Fix: GPv3: Sample weight crash
Crash due to nullptr when unified weight is disabled.
Wrong `toolsetting->paint` was passed to `BKE_paint_brush`.

Pull Request: https://projects.blender.org/blender/blender/pulls/130495
2024-11-19 12:20:14 +01:00
YimingWu
07a4e656e0 Fix #130501: Duplicated black materials adding GPv3 stroke
When adding GPv3 "Stroke" object into the scene from object add menu,
there was a duplicated black material being added. Probably a typo.

Pull Request: https://projects.blender.org/blender/blender/pulls/130508
2024-11-19 12:08:05 +01:00
Pratik Borhade
6314b55ab2 Fix #130475: GPv3: Update object data after changing subdivision levels
Changing subdivision levels in subdiv modifier does not update object
and viewport stats. This is due to missing depsgraph update.

Pull Request: https://projects.blender.org/blender/blender/pulls/130490
2024-11-19 11:53:27 +01:00
Omar Emara
54fa1f9bb7 Compositor: Implement Cryptomatte for new CPU compositor
Reference #125968.
2024-11-19 12:47:23 +02:00
Jacques Lucke
8528407a18 Cleanup: rename ComponentAttributeProviders to GeometryAttributeProviders
This API is used even without `GeometryComponent` nowadays.
2024-11-19 11:37:29 +01:00
Iliya Katueshenock
ae0ab14716 Cleanup: BLI: Binary search first_if and last_if utils
Cleanup to simplify code by using common terms like _first_ and _last_ in context
of predicate applying in a range just like we do for spans and range containers.

Pull Request: https://projects.blender.org/blender/blender/pulls/130380
2024-11-19 11:05:57 +01:00
Thomas Dinges
e16cc94c5c Merge branch 'blender-v4.3-release' 2024-11-19 10:05:45 +01:00
Sean Kim
2b18cad88b Fix #130459: Select tools do not work in Weight Paint
Introduced in 23cd299ba7

Pull Request: https://projects.blender.org/blender/blender/pulls/130480
2024-11-19 09:52:10 +01:00
Jesse Yurkovich
7788c85472 Cleanup: USD: remove dead fields from ImportSettings struct
Looks like the initial version of this struct was copied from Alembic.
Remove the fields that were never ultimately used and initialize the
remaining fields inline.

Pull Request: https://projects.blender.org/blender/blender/pulls/130492
2024-11-19 08:16:09 +01:00
YimingWu
911ccac5f8 Fix #130198: GPv3 build modifier timing for nature drawing speed
GPv3 build modifier in "Nature Drawing Speed" mode didn't finish
building a frame when the time it took to draw those strokes by hand is
greater than the frame duration. Previous fix #129894 is only effective
for "Number of Frames" build mode. This fix moved the timing scaling
into `get_build_factor` and `get_factor_from_draw_speed` for more
granulated control in different modes.

Pull Request: https://projects.blender.org/blender/blender/pulls/130199
2024-11-19 05:16:16 +01:00
Germano Cavalcante
9b3fb99bc9 Fix #116551: gpu.types.Buffer always returning 'FLOAT' type on MacOS
The issue involves using const on a variable that is later modified.
2024-11-18 23:24:48 -03:00
Sean Kim
54c0699413 Fix: Assert when undoing sculpt deformation
Pull Request: https://projects.blender.org/blender/blender/pulls/130477
2024-11-18 22:29:17 +01:00
Clément Foucault
eeeac09241 DRW: Update reference for pass_all_commands and manager_sync tests
These were not updated after functional changes.
2024-11-18 21:33:17 +01:00
Germano Cavalcante
dc653b94cc Cleanup: merge transform_data.hh into transform.hh
What's in one ends up mixing with the other. There's no need to keep
the two headers separate.
2024-11-18 17:13:35 -03:00
Germano Cavalcante
cc293577d6 Cleanup: Replace TRANSDATABASIC macro with explicit struct 2024-11-18 17:13:35 -03:00
Germano Cavalcante
1cc113dd5c Refactor: Transform - Remove the member 'TransData::ob'
This member was only really used by `transform_convert_object.cc` and
`transform_convert_object_texspace.cc`.

So instead of using a super-specialized member, use `TransData::extra`
instead.
2024-11-18 17:13:34 -03:00
Germano Cavalcante
ba3d017929 Transform: remove unused "GPENCIL_SHRINKFATTEN"
Since `c986aa03b9`, this mode is no longer used and is quite difficult
to access, as in version 4.3, `ob->data` should never be of type
`bGPdata *`.

Pull Request: https://projects.blender.org/blender/blender/pulls/130406
2024-11-18 21:09:07 +01:00
Lukas Tönne
8e8d21a8ca Fix #130456: GP Render engine crash due to C/C++ mix
1d48d842 introduced a float4x4 matrix in the GPencil render data, but that
struct must be trivially initializable. Use a conventional C matrix to avoid
crashes.

Pull Request: https://projects.blender.org/blender/blender/pulls/130468
2024-11-18 19:42:43 +01:00
Thomas Dinges
43def5d19d Release: Bump to 4.3 release 2024-11-18 19:15:25 +01:00
Miguel Pozo
d4f321fe54 Overlay: Add a pre_draw step and use submit_only for PassMain
Run the compute steps of all passes up-front to avoid constant GPU
compute/raster context switching.

Pull Request: https://projects.blender.org/blender/blender/pulls/130336
2024-11-18 18:25:09 +01:00
Miguel Pozo
d50d287924 Draw: Add specialized generate_commands for PassSortable 2024-11-18 18:25:07 +01:00
Miguel Pozo
5586533cc8 Overlay: Add image_plane_depth_bias shader
Move the depth bias to the shader to avoid creating extra views and
culling passes.
2024-11-18 18:25:07 +01:00
Miguel Pozo
c86fd709cf Overlay: Add missing early return 2024-11-18 18:25:07 +01:00
Miguel Pozo
a9cd1639db Cleanup: Fix codestyle for private variables 2024-11-18 18:25:07 +01:00
Miguel Pozo
cd26e0834b FIx: EEVEE: Fix asserts on exit at GLShaderCompiler destructor 2024-11-18 18:24:09 +01:00
Julian Eisel
f0db870822 UI: Support persistent view state, write tree-view height to files
Adds support for saving some view state persistently and uses this to keep the
height of a tree-view, even as the region containing it is hidden, or the file
re-loaded.

Fixes #129058.

Basically the design is to have state stored in the region, so it can be saved
to files. Views types (tree-view, grid-view, etc) can decide themselves if they
have state to be preserved, and what state that is. If a view wants to preserve
state, it's stored in a list inside the region, identified by the view's idname.

Limitation is that multiple instances of the same view would share these bits of
state, in practice I don't think that's ever an issue.

More state can be added to be preserved as needed. Since different kinds of
views may require different state, I was thinking we could add ID properties to
`uiViewState` even, making it much more dynamic.

Pull Request: https://projects.blender.org/blender/blender/pulls/130292
2024-11-18 18:19:48 +01:00
Jacques Lucke
9f0d20c056 Cleanup: Blenloader: add missing const
This adds `const` in a few obvious places where it should be used.

Pull Request: https://projects.blender.org/blender/blender/pulls/130461
2024-11-18 17:55:24 +01:00
Sebastian Parborg
4acb7455df VSE: Remove byte position index from our time codes
This is a more invasive change to the timecode indexer because ffmpeg removed the ability to to get the `pkt_pos` (byte location of a frame packet):
27f8c9b27b
As stated there, they don't think that using it too seek is any better than using the dts or the pts position of the packets.
While you can still seek with the byte position, you need to do quite a bit of extra work to get this information from ffmpeg.
As we are only using it for the indexer and only if the fileformat was quite old (mpegts etc) I thought that we could instead simplify this and always seek by the pts timestamp instead.

Pull Request: https://projects.blender.org/blender/blender/pulls/130444
2024-11-18 17:46:33 +01:00
Sebastian Parborg
b1ca2f09db Fix: FFmpeg deprecation warnings
Pull Request: https://projects.blender.org/blender/blender/pulls/127203
2024-11-18 17:46:04 +01:00
Jeroen Bakker
f7fef99b31 Vulkan: Fix renderdoc step-by-step debugger.
Recently the GLSL code was changed in Blender. For every GLSL file
the #line directive was added. However due to limitations in Blender
we misuse the indexed based line directive to store a hash. This is not
according to the spec where indexes should index the source inside the
array of sources. In vulkan the indexed based approach is not
'supported' as the compiler inputs only accepts a single file.

We tried to support file based approach but that lead to other issues in
renderdoc. Might be related to that the source file doesn't exist on the
file system.

This PR fixes this by scrambling the #line directive so the
step-by-step debugger can be used. The scrabling only happens when
blender is started with the `--debug-gpu-renderdoc` startup argument.

Pull Request: https://projects.blender.org/blender/blender/pulls/130458
2024-11-18 17:37:35 +01:00
Clément Foucault
7ca8a66a45 Fix: Overlay-Next: Fix uninitialized memory in some shape batches 2024-11-18 17:16:18 +01:00
Clément Foucault
d4ac4f7b2d DRW: Make manager and passes allow range of handles
Allow passing range of resources inside the draw manager.

This allows to reduce the overhead of the drawing logic
for group of instances sharing the same drawing state.

The only catch is that we do consider them as having the
same handedness, which seems to be a valid assumption for
now.

For now this is not used and just change the API in a transparent
way to allow incremental changes to the engines code.

Pull Request: https://projects.blender.org/blender/blender/pulls/130290
2024-11-18 17:08:19 +01:00
Bastien Montagne
645e542b58 Fix/Cleanup (unreported) illegal PointerRNA::owner_id manipulation.
RNA accessors should never (ever?) modify the `owner_id` of their parent
PointerRNA data. This is opening a potential monstruous can of worms.

If such behavior is absolutely needed, there should be a very detailed
comment about why!

In the present case, this does not seem needed at all - and was most
likely fairly harmless in practice.
2024-11-18 17:04:50 +01:00
Bastien Montagne
fb59efb12e Cleanup: Use PointerRNA_NULL assignement to reset a PointerRNA.
Do not reset each individual values manually.
2024-11-18 17:04:50 +01:00