Commit Graph

5246 Commits

Author SHA1 Message Date
Jeroen Bakker
71c716d8c0 Vulkan: Fix incorrect texture update
Texture update ignored layered based offsets and extents. This was
an oversight due to misintepreting the API. This fixes uploading the
utility texture of EEVEE and enables correct material shading.

Pull Request: https://projects.blender.org/blender/blender/pulls/123371
2024-06-18 14:58:41 +02:00
Jeroen Bakker
b598bd4a6f Merge branch 'blender-v4.2-release' 2024-06-18 10:55:24 +02:00
Jeroen Bakker
c525c0354f EEVEE: Film accumulation workaround for Metal/Intel iGPUs
EEVEE Film accumulation workaround for Metal/Intel iGPUs.

On Metal the Intel iGPUs do not support image read write
on array textures. However this limitation doesn't show
any artifacts when using the compute shader.

This PR is a work around that uses the film_comp shader
to process the film samples, but uses a separate film_copy_frag
shader to read the result and copy them to the frame buffer.

I deliberately didn't include the fix to the film_frag shader
as that would change the read/write resources and could lead
to performance issues for other platforms. Writable resources
are typically slower compared to read only resources.

Some code needed to be duplicated (and not added to `*_lib.glsl`)
as compilers would still raise compilation errors due to imageStore/Load
on incompatible resource access.

The Metal/Intel iGPU is also marked to have limited support as
raytracing and probes still produces big artifacts.

This workaround can be tested on any platform just by setting
`use_compute_ = true` in `Film::sync`

Related to #122361

Pull Request: https://projects.blender.org/blender/blender/pulls/123330
2024-06-18 10:53:53 +02:00
Miguel Pozo
0a38a8d56a Merge branch 'blender-v4.2-release' 2024-06-17 19:39:13 +02:00
Miguel Pozo
50a83d3e0b Fix: BLI_SUBPROCESS_SUPPORT check
Fix compilation on platforms with OpenGL but not BLI_subprocess support.
2024-06-17 19:35:51 +02:00
Clément Foucault
6d375cf7f0 Fix: EEVEE: Wrong thickness for rotated objects
The previous code was using matrix multiplication to
get the local thickness to world thickness.

The correct way is to multiply the local thickness
by the scale of the object (length of each columns
of the object_to_world matrix).
2024-06-17 19:12:24 +02:00
Clément Foucault
b5a9a67dcf Fix: EEVEE: Object holdout not working
This implement the holdout flag by switching to
the holdout case in the shader. This has a few benefits:
- Doesn't recompile the shaders.
- Makes the object infos mandatory (already the case in
  practice)
- Handle transparent materials properly, keeping the
  transparency working.

Fix #123284

Pull Request: https://projects.blender.org/blender/blender/pulls/123315
2024-06-17 19:08:37 +02:00
Jacques Lucke
8b7cde3efc Merge branch 'blender-v4.2-release' 2024-06-14 20:19:03 +02:00
Miguel Pozo
a22a4810c7 GPU: Use size_t for GPU buffer sizes
Update all GPU buffer size-related functions to use `size_t` for
consistency.

Pull Request: https://projects.blender.org/blender/blender/pulls/123240
2024-06-14 19:27:33 +02:00
Campbell Barton
f529b0f115 Cleanup: compiler warning with enum mis-match 2024-06-15 00:31:17 +10:00
Brecht Van Lommel
bda53799d5 Cleanup: make format 2024-06-14 15:47:49 +02:00
Jeroen Bakker
7a8831ba13 Vulkan: Fix clamp to edge samplers
When using GPU_SAMPLER_EXTEND_MODE_EXTEND the incorrect sampler
was created, making the OCIO shader fail. This PR selects the
correct wrapping mode (CLAMP_TO_EDGE).

Pull Request: https://projects.blender.org/blender/blender/pulls/123234
2024-06-14 15:36:48 +02:00
Jeroen Bakker
11218f2fca Vulkan: Fix clang compiler warning
_No response_

Pull Request: https://projects.blender.org/blender/blender/pulls/123233
2024-06-14 15:26:25 +02:00
Aras Pranckevicius
60d8802ffc Merge branch 'blender-v4.2-release' 2024-06-14 12:46:10 +03:00
Aras Pranckevicius
d61db84153 Fix #123136: Very narrow VSE strips flicker when zoomed out
Make sure they are at least 1px wide when evaluating the rounded rectangle SDF.

Pull Request: https://projects.blender.org/blender/blender/pulls/123221
2024-06-14 11:19:43 +02:00
Jeroen Bakker
58ecfb869d Vulkan: Remove render graph switch
As render graph is now the default, we can remove the
render graph switch. This allows us to cleanup unused
functions and classes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123219
2024-06-14 09:44:59 +02:00
Jeroen Bakker
07ea6a5c23 Vulkan: Enable render graph
This PR hooks up the vulkan backend with the render graph
for drawing. It can run Blender better than the previous
implementation so we also flipped it to be the default
implementation.

**Some highlights**
- Adds support for framebuffer load/store operations
- Adds support for framebuffer subpass transitions
- Fixes workbench shadows
- Performance is just below OpenGL performance when comparing
  fps. But the screen feels more fluent when using complex
  scenes.
- Current performance is without doing any optimizations so
  will improve in the future.
- EEVEE will not crash but has artifacts and many parts that
  require more work.

**Related to**
- #121648
- #118330

**Known Limitation**
- Similar to previous implementation resources can be freed when
  still in use crashing Blender. This is typically the case when
  playing back an animation or updating a material icon.

**Next steps**
- Remove old implementation
- Get EEVEE to work
- Fix double resource freeing
- Improve performance by identifying hotspots and change them

Pull Request: https://projects.blender.org/blender/blender/pulls/121787
2024-06-14 08:46:33 +02:00
Hans Goudey
c6674bad5c Cleanup: Formatting 2024-06-13 10:49:26 -04:00
Miguel Pozo
b0e92cfba6 Merge branch 'blender-v4.2-release' 2024-06-13 15:54:24 +02:00
Miguel Pozo
f251452a4b Fix #123014: Hundreds of empty folders in the %temp% directory
Use BLI_temp_directory_path_get instead of
BKE_tempdir_base.
2024-06-13 15:53:40 +02:00
Jeroen Bakker
22d352dacc Vulkan: Render graph drawing
This PR adds drawing support to the render graph. It adds support for
draw, indirect draw, indexed draw and indexed indirect draw.

Draw commands can only be executed within a rendering scope. Data
transfer commands and dispatch commands cannot be executed within a
rendering scope. Blender can still send in commands in any order and
the render graph needs to find out the best order to minimize context
switches (rendering/begin/end). This is the responsibility of the
scheduler.

The scheduler will push data transfer and dispatch commands outside the
rendering scope:
- data transfer and dispatch commands at the beginning are done before
  the rendering begin.
- data transfer and dispatch commands at the end are done after the
  rendering end.
- data transfer and dispatches in between draw commands will be pushed
  to the beginning if they are not yet being used.
- for all other data transfer and dispatch commands the rendering is
  suspenderd and will be continued afterwards.

Within a rendering context it is not allowed to perform synchronization
commands. Any synchronization commands inside a rendering scope will be
performed before the rendering scope begins. Nodes are now organized
in groups to simplify the code around this area.

Pull Request: https://projects.blender.org/blender/blender/pulls/123168
2024-06-13 09:37:17 +02:00
Campbell Barton
1d94c34f2a Merge branch 'blender-v4.2-release' 2024-06-12 10:54:06 +10:00
Campbell Barton
91d45db8bb Remove use of potentially unsafe strncat & strcpy 2024-06-12 10:52:09 +10:00
Aras Pranckevicius
165a929196 Merge branch 'blender-v4.2-release' 2024-06-11 19:15:07 +03:00
Aras Pranckevicius
c38951d0f5 Fix #123016: inconsistent VSE timeline strip pixel grid rounding
Previous commit that made VSE strip controls not be blurry (91fa37fecb)
applied "snap to pixel grid" in a wrong place - the rectangle corners
should be snapped, not the center and half-size of it.

Pull Request: https://projects.blender.org/blender/blender/pulls/123065
2024-06-11 18:12:32 +02:00
Miguel Pozo
e80bc3db12 Merge branch 'blender-v4.2-release' 2024-06-11 16:56:05 +02:00
Miguel Pozo
fb5faf3305 FIx #122915: Diffuse normal input isn't normalized automatically 2024-06-11 16:51:04 +02:00
Jeroen Bakker
e48ba6c508 Merge branch 'blender-v4.2-release' 2024-06-11 14:12:02 +02:00
Jeroen Bakker
af34a8a952 GPU: Fix GLSL compilation error on legacy NVIDIA drivers
Somehow the 16K inside a string is parsed as being an integer, leading
to error messages about the `K` suffix.

```
ERROR (gpu.shader): gpu_shader_icon_multi VertShader:
      |
    1 | #version 430
      |
      | Error: C0159: invalid char 'K' in integer constant suffix
```

Fixed by changing the 16K to the actual number.

Related to #122977 With this PR blender will start, but EEVEE will render pink.

Pull Request: https://projects.blender.org/blender/blender/pulls/123071
2024-06-11 14:07:57 +02:00
Aras Pranckevicius
57f1d11163 Fix: VSE strip shape is not rounded when dragging file into timeline area
Strips still have sharp corners when you're dragging them from file browser and
switch to rounded when dropped. Fix by using the same drawing code (and shader)
as regular timeline drawing path.

Pull Request: https://projects.blender.org/blender/blender/pulls/123013
2024-06-11 11:55:49 +02:00
Campbell Barton
eca309cb1c Merge branch 'blender-v4.2-release' 2024-06-11 19:29:43 +10:00
Campbell Barton
2e00df3ee2 Cleanup: spelling in comments 2024-06-11 19:21:56 +10:00
Jeroen Bakker
f13e51543c Cleanup: Fix spelling mistake
Attachement -> Attachment

Pull Request: https://projects.blender.org/blender/blender/pulls/122988
2024-06-10 09:57:15 +02:00
Clément Foucault
3f247d6a3c Fix: GPU: Make tests compile 2024-06-08 00:25:40 +02:00
Hans Goudey
466df1a97a Subdiv: Utility for grid index XY lookup, use in paint visibility function 2024-06-07 13:39:11 -04:00
Miguel Pozo
83db9cc7b4 Merge branch 'blender-v4.2-release' 2024-06-07 18:47:47 +02:00
Miguel Pozo
22652b305e GPU: Add GPU_shaders_precompile_specializations
Allow precompiling specialization constants variations in parallel.
Only supported in OpenGL as the rest of the batch compilation API,
on the other backends the function is a no-op.
This also moves the `SpecializationConstant` from
`gpu_shader_create_info` (private API) into`GPU_common_types`
(public API).

Pull Request: https://projects.blender.org/blender/blender/pulls/122796
2024-06-07 18:45:31 +02:00
Aras Pranckevicius
fb0e358e1a Merge branch 'blender-v4.2-release' 2024-06-07 18:43:17 +03:00
Aras Pranckevicius
73d4872f5a Fix: VSE strip outline no longer extends outside of strip bounds
Previously selected strips in VSE timeline were drawing their outline
1px outside of the strip boundaries. This makes outlines of the strips
overlap each other when neighboring strips are selected.

Now the selected outline is fully within regular strip shape.

Pull Request: https://projects.blender.org/blender/blender/pulls/122890
2024-06-07 17:41:56 +02:00
Miguel Pozo
ca7f1785fc Merge branch 'blender-v4.2-release' 2024-06-07 16:25:37 +02:00
Aras Pranckevicius
91fa37fecb Fix: VSE timeline strip rounded corner outlines not pixel correct
PR #122576 added rounded corners to VSE timeline strips, but they were not
"snapped" to pixel grid so the outline that is normally 1px was sometimes
falling in between pixels and was blurred out.

Fix by rounding all SDF related coordinates inside the shader to the pixel
grid.

Pull Request: https://projects.blender.org/blender/blender/pulls/122764
2024-06-07 16:18:09 +02:00
Miguel Pozo
fb98edf322 GPU: Add GPU_material_batch_compile
Add `GPU_material_batch` API.
It uses the new `GPU_shader_batch` from #122232 internally and it
works in the same way.

Note: This doesn't implement parallel material optimizations.

Pull Request: https://projects.blender.org/blender/blender/pulls/122793
2024-06-07 16:11:50 +02:00
Miguel Pozo
ec0dd18de5 GPU: OpenGL: Support parallel geometry and compute shader compilation
Support parallel compilation of geometry and compute shaders when
using the `GPU_shader_batch` API.

Pull Request: https://projects.blender.org/blender/blender/pulls/122792
2024-06-07 16:10:43 +02:00
Miguel Pozo
2864942dc8 Merge branch 'blender-v4.2-release' 2024-06-06 15:50:42 +02:00
Miguel Pozo
a249e93ad1 GPU: Add missing virtual destructor to ShaderCompiler 2024-06-06 15:50:09 +02:00
Campbell Barton
d98a7a7756 Merge branch 'blender-v4.2-release' 2024-06-06 10:23:16 +10:00
Campbell Barton
7f7648c6ed Cleanup: spelling in code comments & minor edits
- Use uppercase NOTE: tags.
- Correct bNote -> bNode.
- Use colon after parameters.
- Use doxy-style doc-strings.
2024-06-06 09:55:13 +10:00
Lukas Stockner
5891a73785 Merge branch 'blender-v4.2-release' 2024-06-05 20:25:50 +02:00
Hans Goudey
84c4ddbbb9 Cleanup: GPU: Use references for some vertex buffer functions
Pull Request: https://projects.blender.org/blender/blender/pulls/122784
2024-06-05 18:47:22 +02:00
Miguel Pozo
74224b25a5 GPU: Add GPU_shader_batch_create_from_infos
This is the first commit of the several required to support
subprocess-based parallel compilation on OpenGL.
This provides the base API and implementation, and exposes the max
subprocesses setting on the UI, but it's not used by any code yet.

More information and the rest of the code can be found in #121925.

This one includes:
- A new `GPU_shader_batch` API that allows requesting the compilation
  of multiple shaders at once, allowing GPU backed to compile them in
  parallel and asynchronously without blocking the Blender UI.
- A virtual `ShaderCompiler` class that backends can use to add their
  own implementation.
- A `ShaderCompilerGeneric` class that implements synchronous/blocking
  compilation of batches for backends that don't have their own
  implementation yet.
- A `GLShaderCompiler` that supports parallel compilation using
  subprocesses.
- A new `BLI_subprocess` API, including IPC (required for the
  `GLShaderCompiler` implementation).
- The implementation of the subprocess program in
  `GPU_compilation_subprocess`.
- A new `Max Shader Compilation Subprocesses` option in
  `Preferences > System > Memory & Limits` to enable parallel shader
  compilation and the max number of subprocesses to allocate (each
  subprocess has a relatively high memory footprint).

Implementation Overview:
There's a single `GLShaderCompiler` shared by all OpenGL contexts.
This class stores a pool of up to `GCaps.max_parallel_compilations`
subprocesses that can be used for compilation.
Each subprocess has a shared memory pool used for sending the shader
source code from the main Blender process and for receiving the already
compiled shader binary from the subprocess. This is synchronized using
a series of shared semaphores.
The subprocesses maintain a shader cache on disk inside a
`BLENDER_SHADER_CACHE` folder at the OS temporary folder.
Shaders that fail to compile are tried to be compiled again locally for
proper error reports.
Hanged subprocesses are currently detected using a timeout of 30s.

Pull Request: https://projects.blender.org/blender/blender/pulls/122232
2024-06-05 18:45:57 +02:00