Commit Graph

6846 Commits

Author SHA1 Message Date
Skyth af2fea0ad3 Fix leftover particle data when updating particle buffers.
Co-authored-by:  Skyth <19259897+blueskythlikesclouds@users.noreply.github.com>
2026-06-11 21:02:05 +02:00
HP van Braam 52f27370ab Fix a deadlock in CanvasRenderRD
RenderingServerDefault::_draw wants to get all of the materials. The threaded
loader is still loading the materials:

1) The main thread locks canvas_singleton->shader.mutex via
   RendererRD::Utilities::update_dirty_resources
    -> RendererRD::MaterialStorage::_update_queued_materials
      -> RendererCanvasRenderRD::CanvasMaterialData::update_parameters()
2) RendererCanvasRenderRD::CanvasMaterialData::update_parameters() wants
   to get the current shader via ShaderRD::version_get_shader. This
   eventually wants to wait on the load of that shader via
   WorkerThreadPool::wait_for_group_task_completion in
   ShaderRD::_compile_version_end

At this point the main thread is waiting for the threaded load to finish
loading the shader. Meanwhile in a thread not too far away the load is
progressing:

1) The loader is loading the tres in ResourceLoaderText::load which
   eventually wants to ShaderMaterial::set_shader
2) We eventually end up in RendererCanvasRenderRD::CanvasShaderData::set_code
3) set_code wants to lock canvas_singleton->shader.mutex to protect
   against concurrent compilation

At this point the main thread is waiting on the load to complete, but
holds "canvas_singleton->shader.mutex" via update_parameters(), and the
loader is waiting on "canvas_singleton->shader.mutex" in set_code.

Tragedy ensues etc.

To fix the problem we don't acquire the lock until after we're sure
we're done compiling the shader.

The same pattern exists in scene_shader_forward_clustered.cpp which
was created in the same commit as the code in the canvas singleton.

With this change the deadlock can no longer occur as set_code() can now run
concurrently with RenderingServerDefault::_draw() as the path where the
main thread waits on the workerthreadpool with
canvas_singleton->shader.mutex held can no longer occur.

Data integrity wise: previously you'd think that
canvas_singleton->shader.mutex would have protected against metadata
changes to uniforms, ubo_offsets, and texture_uniforms but set_code() used
to write to some of these (uniforms, ubo_size) without taking the lock with
no ill effects because the material isn't updated until the shader has loaded.

A similar pattern was found in scene_shader_forward_mobile.cpp and was
fixed in the same way.
2026-06-08 00:22:02 +02:00
Skyth 2896cd9ef4 Fix area light atlas also destroying VoxelGI uniform sets. 2026-06-03 20:04:49 +03:00
Skyth 48f9cf19af Put area light cluster iterations behind a spec constant. 2026-06-02 17:49:44 +03:00
Pāvels Nadtočajevs 586d613f43 Fix drawable texture access before null check. 2026-06-01 09:35:34 +03:00
Thaddeus Crews 243f3537ed Merge pull request #119639 from blueskythlikesclouds/adreno-disable-ubershader
Disable ubershaders on problematic Adreno compiler versions.
2026-05-25 11:19:00 -05:00
Thaddeus Crews 4354aa9806 Merge pull request #116203 from blueskythlikesclouds/shader-race-condition-fix
Fix `MaterialStorage::material_set_shader` race condition.
2026-05-25 11:18:59 -05:00
Thaddeus Crews 6c6d7c5ff6 Merge pull request #119587 from Calinou/taa-mobile-fix-jitter
Fix 3D rendering jittering when TAA is enabled in the Mobile renderer
2026-05-25 11:18:57 -05:00
Thaddeus Crews 12a102e93c Merge pull request #119401 from blueskythlikesclouds/rd-race-condition-fixes
Fix a few race conditions in RD.
2026-05-25 11:18:57 -05:00
Thaddeus Crews fa6cad230f Merge pull request #119665 from clayjohn/blit-screen-texture
Forbid using hint_screen_texture in unsupported shader types
2026-05-22 19:24:23 -05:00
Clay John 57ab62b421 Forbid using hint_screen_texture in unsupported shader types 2026-05-22 10:38:52 -07:00
Skyth c6987624ef Disable ubershaders on problematic Adreno compiler versions. 2026-05-21 22:13:32 +03:00
Hugo Locurcio eab6733f85 Fix 3D rendering jittering when TAA is enabled in the Mobile renderer
The Mobile renderer doesn't support TAA, but we still configured
the 3D buffers as if TAA was enabled after turning an error into
a warning previously.

This also adds a similar early return to screen-space AA when
on Compatibility to avoid unnecessary 3D buffer reconfiguration.
2026-05-21 03:37:26 +02:00
kleonc 7ec5fa2440 Fix y-sort modulation div by zero 2026-05-19 11:59:01 +02:00
Thaddeus Crews 1378c909f0 Merge pull request #117773 from Calinou/lightmapgi-fix-probe-interpolation-at-lightmap-edges
Fix LightmapGI probe interpolation at lightmap AABB edges
2026-05-14 09:06:52 -05:00
Thaddeus Crews ef7d768e65 Merge pull request #119375 from Chaosus/shader_fix_material_params
Fix shader crash when using parameter name identical to uniform name
2026-05-14 09:06:51 -05:00
Thaddeus Crews 1078619908 Merge pull request #119414 from clayjohn/legacy-fog-blend
Add project setting to disable new Volumetric fog blending behavior
2026-05-12 17:54:07 -05:00
Thaddeus Crews 8075f4250f Merge pull request #119373 from LanzaSchneider/fix-enum-binding-lost
Fix `DisplayServerEnums::MouseMode` enum binding being lost with `deprecated=no`
2026-05-12 17:54:05 -05:00
Clay John c76223a35e Add project setting to disable new Volumetric fog blending behavior for existing projects that want to upgrade.
Setting is off by default, so its only intended for people who really need to rollback to the previous behavior.
2026-05-12 10:48:46 -07:00
Thaddeus Crews 872f2f073c Merge pull request #119337 from blueskythlikesclouds/sdfgi-barrier-fix
Fix undefined barrier usage in SDFGI preprocess shader.
2026-05-11 10:59:47 -05:00
Thaddeus Crews 8d3d0ea6ca Merge pull request #119340 from blueskythlikesclouds/sdfgi-uniform-set-error-fix
Fix null uniform set error when enabling SDFGI.
2026-05-11 10:59:47 -05:00
Thaddeus Crews d3eef6c722 Merge pull request #119316 from AtomicAntt/rename-various-signal-parameters
Rename various signal parameters called 'name'
2026-05-11 10:59:45 -05:00
Skyth 61c16d62c6 Fix a few race conditions in RD. 2026-05-11 15:33:48 +03:00
Chaosus 82ffafa399 Fix shader crash when using parameter name identical to uniform name 2026-05-11 11:57:18 +03:00
LanzaSchneider a15ec35bb7 fix: lost DisplayServerEnums::MouseMode enum binding with deprecated=no 2026-05-10 12:12:18 +08:00
Skyth c22117dacd Fix null uniform set error when enabling SDFGI. 2026-05-08 17:28:22 +03:00
Skyth 0bba587614 Fix undefined barrier usage in SDFGI preprocess shader. 2026-05-08 17:10:58 +03:00
Thaddeus Crews aaaf76403e Merge pull request #119223 from Calinou/render-timestamp-add-setup-shadows
Add Setup Shadows render timestamp for the visual profiler
2026-05-07 16:22:28 -05:00
Thaddeus Crews ce26629ff5 Merge pull request #119230 from stuartcarnie/compute_barrier_before_end
Rendering: Remove `compute_list_add_barrier` before `compute_list_end`
2026-05-07 16:22:28 -05:00
Thaddeus Crews 96c9b3e8aa Merge pull request #119304 from stuartcarnie/fix_issue_118918
Rendering: Zero uninitialized InstanceData fields
2026-05-07 16:22:27 -05:00
AtomicAntt 27b3ee0755 Rename various signal parameters called 'name' 2026-05-07 11:02:23 -07:00
Thaddeus Crews d51d1ec682 Merge pull request #119289 from Calinou/gpu-index-compatibility-warn-unsupported
Warn about `--gpu-index` CLI argument being unsupported in Compatibility
2026-05-07 11:13:31 -05:00
Stuart Carnie 64a1a66a14 Rendering: Zero double InstanceData fields
Root cause was unitinitialised stack variable.

I was able to reproduce by enabling this build-flag:

```
-ftrivial-auto-var-init=pattern
```

which initialises stack allocated variables with hostile values.

Closes #118918
2026-05-07 19:06:42 +10:00
Thaddeus Crews fddd45ea1c Merge pull request #119091 from ArchercatNEO/context-driver-surface-supports-hdr
HDR: Implement checking if surface supports HDR output.
2026-05-06 14:56:27 -05:00
ArchercatNEO 3f29efc8a2 HDR: Implement surface supports HDR output.
Previously the Wayland display server would attempt to enable
HDR output and try to detect if it failed afterwards which had some issues.
Now we can query the rendering driver for support and avoid ever enabling
HDR output when this would fail.
2026-05-06 19:51:54 +01:00
Hugo Locurcio a96279db3e Warn about --gpu-index CLI argument being unsupported in Compatibility
- Print a warning when `--gpu-index` is out of range in RenderingDevice-based
  renderers, since it falls back to automatic GPU selection.

The GPU selection logic is only available in RenderingDevice-based renderers.
2026-05-06 19:23:14 +02:00
Stuart Carnie 0b561521fe Rendering: Remove compute_list_add_barrier before compute_list_end
`compute_list_add_barrier` ends and begins a new compute list with the
same state, so calling this immediately before `compute_list_end` is
redundant, and ends up creating empty compute encoders in Metal.
2026-05-05 06:41:06 +10:00
Hugo Locurcio 376bea65e0 Add Setup Shadows render timestamp for the visual profiler
- Rename shadow timestamp to clarify it's for directional and spot shadows.
- Fix Render OmniLight Shadows timestamp being visible even when no
  omnilight shadows are being rendered.
2026-05-04 19:30:14 +02:00
Stuart Carnie 0043c950f6 Rendering: Fix priority sort table 2026-05-04 06:50:46 +10:00
Thaddeus Crews f059d64e3d Merge pull request #118968 from CookieBadger/area-light-lut-textures
Fix GPU validation errors due to area light LUT format
2026-04-30 10:58:09 -05:00
Thaddeus Crews 179899680b Merge pull request #118198 from viksl/volumetric-fog-nan-handling-reprojected
Filter and sanitize volumetric fog to stop invalid values flooding the screen with black pixels through temporal reprojection.
2026-04-30 10:58:06 -05:00
Skyth f379b84004 Fix material_set_shader race condition. 2026-04-29 17:31:24 +03:00
LiveTrower 936d67b7c7 Fix area light texture color conversion 2026-04-28 10:54:57 -06:00
Thaddeus Crews 393d854f7a Merge pull request #118962 from Chaosus/shader_fix_texture_query_lod
Prevent `textureQueryLod` function from usage in vertex shader
2026-04-28 09:02:53 -05:00
CookieBadger 7c532acc09 change LTC lookup table texture format to RGBAF and set p_8bit_dst to true in gaussian_blur 2026-04-27 21:35:46 +02:00
Thaddeus Crews 75444feae7 Merge pull request #118857 from LiveTrower/clearcoat-reflection-fixes
Fix and clean up clearcoat reflection probe process
2026-04-27 12:05:47 -05:00
Chaosus 618e959afc Prevent textureQueryLod function from usage in vertex shader 2026-04-26 13:39:00 +03:00
LiveTrower 4b94f459f4 Fix and cleanup clearcoat reflection probe process 2026-04-24 16:04:41 -06:00
Thaddeus Crews 7a8adcf4d8 Merge pull request #117913 from allenwp/hdr-output-allow-request
Fix behavior of `window_is_hdr_output_supported` for Wayland and adjust warnings.
2026-04-24 15:43:32 -05:00
Thaddeus Crews 4d794c4ffb Merge pull request #118629 from Kaleb-Reid/fix-bilinear-fallback
Fall back to bilinear scaling when setting FSR or MetalFX Temporal on Mobile
2026-04-24 15:43:31 -05:00