1
0
Fork 0
Commit Graph

1813 Commits

Author SHA1 Message Date
Thaddeus Crews 9911baec70
Merge pull request #103531 from darksylinc/matias-mobile-shadows-update
Fix inefficient upload in Mobile Shadows
2025-03-05 12:07:42 -06:00
Thaddeus Crews 8777f088cc
Merge pull request #103348 from huwpascoe/render_params_fix
Fix 2D instance params crashing using outside of `main()`
2025-03-05 12:07:39 -06:00
Thaddeus Crews 5c3e7280f4
Merge pull request #103506 from bruvzg/shader_pool
Use separate WorkThreadPool for shader compiler.
2025-03-05 12:07:34 -06:00
Rémi Verschelde d831381296
Merge pull request #103092 from darksylinc/matias-luminance-uninit
Fix uninitialized value in Tonemap
2025-03-04 01:00:38 +01:00
Rémi Verschelde daa28e8338
Merge pull request #95912 from etodd/particle-pause-jitter-fix
Fix particle jitter when scene tree is paused
2025-03-04 01:00:10 +01:00
Matias N. Goldberg 62c1a4782d Fix inefficient upload in Mobile Shadows
Clustered performs the following shadow rendering steps

1. Process objects [0; 10) for cascade 0.
2. Process objects [10; 30) for cascade 1.
3. Process objects [30; 100) for cascade 2.
4. Upload objects [0; 100) to GPU.
5. Draw all cascades.

Mobile was supposed to be doing the same, but instead was doing:

1. Process objects [0; 10) for cascade 0.
2. Upload objects [0; 10) to GPU.
3. Process objects [10; 30) for cascade 1.
4. Upload objects [0; 30) to GPU.
5. Process objects [30; 100) for cascade 2.
6. Upload objects [0; 100) to GPU.
7. Draw all cascades.

That is, always reuploaded everything from scratch.
Therefore it pointlessly (and with geometric growth) wasted BW.
2025-03-03 19:57:27 -03:00
clayjohn 1bdb3bc88a Validate triviality of the InstanceData and RenderElementInfo structs in Mobile and Forward+ renderers.
This is needed to avoid overhead that results from calling the constructor during calls to LocalVector.resize()
2025-03-03 14:38:37 -08:00
Pāvels Nadtočajevs 53bb897458 Use separate WorkThreadPool for shader compiler. 2025-03-03 22:28:39 +02:00
yesfish 93bc18f2b0 Fix 2D instance params crashing using outside of main() 2025-02-27 22:10:56 +00:00
Rémi Verschelde a9c5c4db71
Merge pull request #103201 from beicause/shaders-only-convert-source-color-linear
Shaders: Only convert default value to linear color if type hint is `source_color`
2025-02-27 19:34:12 +01:00
Evan Todd 87efa4d210 Fix particle jitter when scene tree is paused. 2025-02-27 08:40:40 -08:00
Hugo Locurcio 92f3173794 Disable texture array reflections on Intel GPUs on macOS due to driver bugs
The check is only present in x86 builds, since Apple Silicon never
uses an Intel GPU by definition.
2025-02-26 02:28:36 +01:00
David Snopek a285d1aa98 `texture_create_from_native_handle()` should return `RID` for texture from `RenderingServer`, not `RenderingDevice` 2025-02-25 14:20:33 -06:00
Michael Alexsander aea559b39a
Allow to compile the engine without XR support 2025-02-25 17:07:21 -03:00
LuoZhihao 5ca3862636 Shaders: Only convert default value to linear color if type is `source_color` 2025-02-23 12:35:53 +08:00
Matias N. Goldberg 8888f9e649 Fix uninitialized value in Tonemap
And anything that uses luminance.

The class Luminance in luminance.cpp is in charge of averaging the
luminance of all pixels.
It performs multiple passes until it reaches a 1x1 texture containing
the total average. This is standard luminance averaging on GPU.

Then the "result" of this frame and the "prev_frame_result" are averaged
together at a certain speed to mimic eye adaptation.

Then this avarege becomes the "source" for the next frame. This is done
here:

```cpp
SWAP(p_luminance_buffers->current,
p_luminance_buffers->reduce.write[p_luminance_buffers->reduce.size() -
1]);
```

So far pretty normal stuff.

**The problem is: prev_frame_result IS UNINITIALIZED**. Therefore it's
possible for prev_frame_result to contain garbage values like -5+e15
which causes the screen to stay black for a minute until eye adaptation
catches up.

Windows will always force allocations to be reset to 0, but Linux does
not do that.
However Windows just delays the bug; because it's possible for VMA to
reuse a block.

You can repro this bug by downloading Bistro, creating a camera,
selecting a default scene; and then launching Bistro.

Everything will work fine.
Until you decide to resize the window. It takes a few tries on Godot,
but eventually the screen becomes black.

If you wait around a minute, the screen will "unblack" itself back to
normal.

Even if it's not stuck in black after resize, you may notice that every
resize is inconsistent in how the eye adaptation catches up (i.e.
sometimes it flashes to white, sometimes it does not).

If you can't repro the bug, you need to try harder by doing arbitrary
resizes until it triggers.
Also, I advise to try this on Linux; since Windows' sanitization of
memory gets in the way.

There's probably multiple tickets already filled around issues that were
rooted in luminance calculations starting from uninitialized memory.

This PR sets a default value of 0, which causes the screen to always
flash white after resize. Setting a different value like 0.1 makes the
flash effect weaker. Setting it to a high value like 5.0 makes the
screen flash from dark instead.

This bug can be backported to 4.3. I don't know if it can be backported
to earlier; as the render graph makes sure the texture_clear() calls
gets issued in the right place; whereas in <= 4.2 it might be
problematic depending on when Luminance::LuminanceBuffers::configure is
being called.
2025-02-20 16:51:41 -03:00
kleonc 2bb6ad5cdf Fix debug CanvasItem redraw rects in RD renderer 2025-02-18 23:49:43 +01:00
kleonc b691a997a3 Fix render info primitive count per TRIANGLE_STRIP 2025-02-15 23:50:07 +01:00
Thaddeus Crews b607110ad2
Merge pull request #102792 from clayjohn/varying-crash
Validate varying count when compiling shaders
2025-02-14 08:25:39 -06:00
clayjohn 35100396e4 Validate varying count when compiling shaders
This avoids crashing on devices when a number of varyings greater than the device limit is used.

For now this accurately prints an error when compiling the shader, but the error text only pops up in the editor if the number of user varyings is above the limit.
2025-02-13 15:07:15 -08:00
Rémi Verschelde 54006f6ebf
Merge pull request #102217 from clayjohn/mobile-pipelines
Reduce mobile pipeline compilations
2025-02-13 23:34:54 +01:00
Thaddeus Crews 1a0bf54677
Merge pull request #102805 from BlueCube3310/rd-tex-fetch-fix
RenderingDevice: Fix certain RD to Image format conversions
2025-02-13 10:15:47 -06:00
Matias N. Goldberg fcd785ace2 Add ASTC HDR format variants 2025-02-13 11:45:42 -03:00
BlueCube3310 27c4e70ee8 RenderingDevice: Fix certain RD to Image format conversions 2025-02-13 10:44:10 +01:00
Matias N. Goldberg 4712d426ef Fix broken skeletal animated meshes
Fixes #102791
2025-02-12 22:25:22 -03:00
Thaddeus Crews 78f1918bd4
Merge pull request #102668 from jkirsteins/janiskirsteins/ios-aspect-fill-splash
[iOS] Sync the boot splash and the launch screen image scale modes
2025-02-12 12:56:26 -06:00
Thaddeus Crews 1939e87db1
Merge pull request #101561 from darksylinc/matias-device-address-api
Change how device address is requested to avoid future API breakage
2025-02-12 12:56:25 -06:00
Jānis Kiršteins 0e266b0099
[iOS] Sync the boot splash and the launch screen image scale modes 2025-02-12 17:41:18 +01:00
Matias N. Goldberg af900a5825 Change how device address is requested to avoid future API breakage
PR #100062 introduced BUFFER_USAGE_DEVICE_ADDRESS_BIT.

However it did so by adding a boolean to uniform_buffer_create(), called
"bool p_enable_device_address".

This makes maintaining backwards compatibility harder because I am
working on another feature that would require introducing yet another
bit flag.

This would save us the need to add fallback routines when the feature I
am working on makes it to Godot 4.5.

Even if my feature doesn't make it to 4.5 either, this PR makes the
routine more future-proof.

This PR also moves STORAGE_BUFFER_USAGE_DEVICE_ADDRESS into
BUFFER_CREATION_DEVICE_ADDRESS_BIT, since it's an option available to
both storage and uniforms.

This PR also moves the boolean use_as_storage into
BUFFER_CREATION_AS_STORAGE.
2025-02-11 20:00:18 -03:00
Rémi Verschelde cfe0fd62d0 Merge pull request #102677 from stuartcarnie/free_invalid_id
2D: Fix free of invalid ID
2025-02-11 23:59:19 +01:00
Rémi Verschelde d967d8d9bd Merge pull request #102280 from Chaosus/fix_particles_process_shader_crash
Fix crash when assigning wrong shader to particle process material
2025-02-11 23:58:56 +01:00
Stuart Carnie 90b2d4b844 2D: Fix free of invalid ID 2025-02-11 08:17:29 +11:00
Rémi Verschelde 0bccb0abd1 Merge pull request #102497 from BlueCube3310/mesh-uv-render-compressed-fix
Fix rendering material when UV2 is compressed
2025-02-07 01:40:02 +01:00
Rémi Verschelde 46aeded4b7 Merge pull request #102480 from DarioSamo/dont-unroll-ubershader
Add loop annotations to ubershaders to prevent loop unrolling.
2025-02-07 01:39:48 +01:00
Rémi Verschelde c695eb9159 Merge pull request #101952 from Flarkk/fix_spotlight_peterpanning_regression
Fix shadow peter-panning with default spotlight
2025-02-07 01:39:15 +01:00
BlueCube3310 8714b36171 Fix rendering material when UV2 is compressed 2025-02-06 20:24:46 +01:00
Dario d39ac94c41 Add loop annotations to ubershaders to prevent loop unrolling. 2025-02-06 09:39:18 -03:00
clayjohn 7444839299 Reduce mobile pipeline compilations by tracking more feature usage globally and only compile what is needed 2025-02-05 18:27:23 -08:00
Rémi Verschelde a9fa4fd7b9 Merge pull request #101642 from huwpascoe/fix_source_color
Shaders: Fix `source_color` default value
2025-02-05 11:33:54 +01:00
Thaddeus Crews ea2770eb4f
Merge pull request #101947 from Rudolph-B/Issue-101750
Add Heightfield mask to GPUParticlesCollisionHeightField3D
2025-02-04 09:04:11 -06:00
Rudolph Bester b162c59097 Fix GPUParticlesCollisionHeightField3D adding collisions excluded by its layer_mask
Co-authored-by: Yahia Zakaria <yahiazakaria13@gmail.com>
2025-02-04 08:02:44 +02:00
Chaosus 53e6d30771 Fix crash when assigning wrong shader to particle process material 2025-02-01 15:12:02 +03:00
clayjohn 6611c863bd Use a smaller epsilon for omni and spot attenuation cutoff
We just want to avoid calculating shadows when the attenuation is zero, so we should use the smallest epsilon we can get away with
2025-01-31 17:08:23 -08:00
Chaosus 570e59df3d Fix shader uniforms has null as default value 2025-01-31 07:35:51 +03:00
Thaddeus Crews 4b9f88280b
Merge pull request #102122 from DarioSamo/default-sdfgi-fix
Fix default SDFGI variant not being compiled in time.
2025-01-29 17:45:17 -06:00
Thaddeus Crews 7e97ada3b7
Merge pull request #102125 from DarioSamo/ubershader-thread-priority
Mark pipeline compilation of ubershaders as high priority.
2025-01-29 17:45:16 -06:00
Thaddeus Crews 3ba6ac0f66
Merge pull request #102143 from MathdudeMan/shader-error
Fix: Mass property particle shader bug
2025-01-29 17:45:13 -06:00
Stuart Carnie 0a9cd5ede9 2D: Fix clip children and rendering artefacts
Fixes both GLES3 and RendererRD implementations

Closes #102147
2025-01-30 07:19:47 +11:00
MathdudeMan 964cd6525e Fix: Mass property particle shader error 2025-01-28 21:00:26 -05:00
Thaddeus Crews a013481b09
Merge pull request #102133 from DarioSamo/particles-clear-color-fix
Fix framebuffer clear for particle collider heightfield.
2025-01-28 16:08:59 -06:00
DarioSamo 5c7fd16eea Fix framebuffer clear for particle collider heightfield. 2025-01-28 14:22:30 -03:00
Thaddeus Crews 5ac6bce58d
Merge pull request #102105 from clayjohn/SDFGI-unflip-normal
Avoid flipping normal based on facing direction when calculating SDF
2025-01-28 09:03:34 -06:00
Dario d0c29faa15 Mark pipeline compilation of ubershaders as high priority. 2025-01-28 11:40:05 -03:00
Dario 655e98b2ea Fix default SDFGI variant not being compiled in time. 2025-01-28 10:24:46 -03:00
clayjohn a525e30c27 Avoid flipping normal based on facing direction when calculation SDF. This shader runs for multiple directions, so the flip direction won't be accurate and just creates bad normals 2025-01-27 16:48:29 -08:00
Stuart Carnie 2510fefebd 2D: Fix rendering artefacts when using `BackBufferCopy`.
Fixes both GLES3 and RendererRD implementations
2025-01-25 10:22:07 +11:00
clayjohn 74989c639e Pass angular diameter into light size constants for sky shaders.
This flew under the radar for so long since tan is nearly linear at small values
2025-01-23 17:32:44 -08:00
Stuart Carnie 663917449b 2D: Fix `CanvasTexture` rendering when updating channels 2025-01-24 07:01:37 +11:00
Florent Guiocheau d08ff57148 Fix peter-panning with default spotlight 2025-01-22 17:05:04 +01:00
Hugo Locurcio dfc05caf06 Use lower shadow normal bias for distant directional shadow splits
This reduces the visual discrepancy between shadow splits when
Normal Bias is greater than 0. Shadow acne at a distance may
be slightly more present, but if the bias and normal bias values are
tuned to avoid acne up close, acne will usually not be present in
distant splits.
2025-01-21 01:58:29 +01:00
Thaddeus Crews 0d4696b472
Merge pull request #101515 from allenwp/agx-negative-optimizations
Optimize AgX tonemapper's handling of negative values
2025-01-20 10:05:38 -06:00
yesfish 860a6ab9ac fix source_color default value 2025-01-16 16:07:25 +00:00
Matias N. Goldberg 7b2f1e1d09 Fix union order to simplify empty initializers
This is a followup to PR #101344 (commit
0e06eb80bc).

Some of them were not an issue because Godot was initializing all
members, but they were "fixed" just in case since it could become a
problem in the future.

Valgrind was specifically complaining about HashMapData &
GlobalPipelineData.
2025-01-14 19:05:01 -03:00
Allen Pestaluky c5cf73a2e7 Optimize AgX tonemapper's handling of negative values
This change improves performance of the AgX tonemapper by allowing two matrix multiplications to be combined into one. This comes at the cost of loss of color information that could be correctly interpreted as positive RGB values in the Rec. 2020 color space. Additionally, an insignificant amount of error is intentionally introduced to the input color value to prevent the need for a second max function call before log2. The final negative color clipping has been removed to allow the tonemapper to return negative RGB values, similar to other tonemappers in Godot.
2025-01-13 17:35:35 -05:00
David House e6daec9cf8 Added indirect drawing functionality to MultiMesh
Update doc/classes/RenderingServer.xml

Co-Authored-By: Micky <66727710+Mickeon@users.noreply.github.com>
2025-01-13 14:51:51 -06:00
Rémi Verschelde 133db1fd60 Merge pull request #92089 from QbieShay/qbe/particle_seek
Implement particle seek request and seed options.
2025-01-13 20:21:28 +01:00
QbieShay e9eb0b6082 Implemented tools around particles seed randomization.
The purpose of this code is to expose the necessary
functions for users and engine devs to develop tooling
for properly timing and seeking inside particles.

Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
Co-authored-by: Tomasz Chabora <kobewi4e@gmail.com>
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2025-01-11 16:31:24 +01:00
Allen Pestaluky 77ddaaaa91 Fix AgX sigmoid contrast curve approximation
This changes the polynomial function so that a lower input always results in a lower output and vice-versa. Additionally, the new function returns a value that is much closer to 1.0 when given an input of 1.0.
2025-01-10 18:17:38 -05:00
Rémi Verschelde 139619ca0c Merge pull request #101355 from akien-mga/style-clang-format-InsertBraces
Style: Enable clang-format's `InsertBraces` config
2025-01-10 23:06:15 +01:00
Rémi Verschelde 3014eec40d Merge pull request #99407 from devloglogan/rec-resolution
Allow using custom `Rect2i` for rendering with OpenXR
2025-01-10 23:05:46 +01:00
Rémi Verschelde 469808f66b Merge pull request #101112 from clayjohn/skyrd-fov
Ensure Sky with custom fov has correction matrix applied to it in RD renderers
2025-01-09 20:51:26 +01:00
Rémi Verschelde 03c83cea1e Style: Enable clang-format's `InsertBraces` config
This was part of our style guide since we started using clang-format
but the feature was only added in clang-format 15, and we hadn't
noticed it yet.
2025-01-09 16:46:51 +01:00
devloglogan e7f6b7ea0b Allow using custom Rect2i for rendering with OpenXR 2025-01-09 09:46:15 -06:00
Dario 0e06eb80bc Fix union order to simplify empty initializers. 2025-01-09 10:39:13 -03:00
Rémi Verschelde 21721ae344 Merge pull request #87260 from Calinou/tonemap-add-agx
Add AgX tonemapper option to Environment
2025-01-08 18:20:03 +01:00
Hugo Locurcio 084e84be78
Add AgX tonemapper option to Environment
Technical implementation notes:

- Moved linearization step to before the outset matrix is applied and
  changed polynomial contrast curve approximation.
  - This does *not* implement Blender's chroma rotation to address hue shift.
    This hue rotation was found to have a significant performance impact.
- Improved performance by combining the AgX outset matrix with the Rec 2020 matrix.

Co-authored-by: Allen Pestaluky <allenpestaluky@gmail.com>
Co-authored-by: Clay John <claynjohn@gmail.com>
2025-01-08 17:01:16 +01:00
Aarni Koskela f134769506 Fix various typos
* Add TODO notes for typos that should be fixed for 5.0

Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2025-01-08 14:47:42 +02:00
Rémi Verschelde 21fdf1678a Merge pull request #101193 from clayjohn/FSR-y-aspect
Correct aspect ratio used in FSR2 calculations
2025-01-07 23:18:04 +01:00
Rémi Verschelde 084da581be
Merge pull request #100241 from lander-vr/reflection-probe-priority
Add priority-based blending to reflection probes.
2025-01-07 10:14:38 +01:00
clayjohn 25a9b04ecc Correct aspect ratio used in FSR2 calculations to remove a source of depth-based ghosting 2025-01-06 14:00:58 -08:00
Stuart Carnie 11dc4f2e5e Metal: Add MetalFX upscaling support
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
2025-01-06 06:03:18 -07:00
clayjohn 96ce5c0001 Ensure Sky with custom fov has correction matrix applied to it in RD renderers 2025-01-03 17:11:02 -08:00
BlueCube3310 6f363b989a astcenc: Misc improvements and optimizations 2024-12-31 14:25:14 +01:00
Thaddeus Crews 13992bbf7b
Merge pull request #100766 from stuartcarnie/metal_crash
Metal: Fix crash when uniform set is empty for slot binding mode
2024-12-30 08:58:51 -06:00
Thaddeus Crews 58b48a934e
Merge pull request #100859 from StaydMcMuffin/scene-shaders-user-normal-fix
Fix User-supplied Normals Being Ignored
2024-12-30 08:58:47 -06:00
Stayd 40f17127ef Fix User-supplied Normals Being Ignored
Moves the initialization of the geo_normal value
to after the user shader code, so that the normal
supplied by the user is actually used instead of
the interpolated vertex normal.
2024-12-27 13:01:20 -07:00
Stuart Carnie b643599749 Metal: Fix crash when uniform set is empty for slot binding mode
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
2024-12-24 07:53:21 -07:00
landervr 1637736c20 ReflectionProbe priority 2024-12-23 21:58:11 +01:00
Rémi Verschelde f7d6924afb
Merge pull request #100677 from clayjohn/light2d-cull
Properly transform light rect and occluder rect to perform Light2D culling in canvas space
2024-12-22 00:10:12 +01:00
clayjohn 30801af298 Properly transform light rect and occluder rect to perform light2d culling in canvas space 2024-12-20 16:58:02 -07:00
Rémi Verschelde 6e23de0aa6
Merge pull request #100653 from stuartcarnie/remove_moltenvk_hack
Rendering: MoltenVK hack is no longer required, as bug was fixed.
2024-12-20 23:57:27 +01:00
Rémi Verschelde 87855e04ad
Merge pull request #100643 from ze2j/follow_up_of_array_mesh_surface_remove
Follow-up of `ArrayMesh::surface_remove` addition
2024-12-20 23:57:20 +01:00
Stuart Carnie 9344a29f0e Rendering: MoltenVK hack is no longer required, as bug was fixed.
Original issue: https://github.com/godotengine/godot/pull/51679#issuecomment-976900929

And related fix in SPIRV-Cross: https://github.com/KhronosGroup/SPIRV-Cross/issues/2046
2024-12-20 06:38:42 -07:00
Yufeng Ying e88e30c273 Remove unused headers in servers.
Co-authored-by: bruvzg <7645683+bruvzg@users.noreply.github.com>
2024-12-20 18:51:01 +08:00
ze2j 97b093617d Follow-up of ArrayMesh::surface_remove addition 2024-12-20 10:53:43 +01:00
Thaddeus Crews e51ab56f9a
Merge pull request #100593 from Namey5/lightmapgi-null-sky-crash
LightmapGI: Fix crash during baking when sky is null
2024-12-19 20:00:14 -06:00
Thaddeus Crews 1536e0e236
Merge pull request #100441 from StaydMcMuffin/scene-shaders-tbn-fixes
Scene Shaders - TBN Vector Fixes
2024-12-19 19:59:58 -06:00
Thaddeus Crews b715fabd70
Merge pull request #76371 from ze2j/array_mesh_surface_remove
Add `ArrayMesh::surface_remove`
2024-12-19 19:59:56 -06:00
Thaddeus Crews 2fcd8223e8
Merge pull request #99538 from Geometror/lightmap-gi-transparent-surface
Add transparency support for LightmapGI
2024-12-19 19:59:52 -06:00
Thaddeus Crews 4665faaaa9
Merge pull request #100427 from Namey5/fog-sky-luminance
Separate sky luminance and brightness calculations for consistent fog
2024-12-19 19:59:50 -06:00