diff options
| author | Arseny Kapoulkine <arseny.kapoulkine@gmail.com> | 2024-08-16 22:08:21 -0700 |
|---|---|---|
| committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-09-16 17:10:59 +0200 |
| commit | 40dcdcbe7902ee71f897fd73adfe1a4e337da81b (patch) | |
| tree | a853882f7915948f9275cee3938ae98d8e610f0c /servers | |
| parent | b2c83b42f6502d03457e4276417b5ab84b5c805b (diff) | |
| download | redot-engine-40dcdcbe7902ee71f897fd73adfe1a4e337da81b.tar.gz | |
Fix double free in FSR2 destructor
Before this change, using FSR2 resulted in the following error when the
effect was destroyed:
ERROR: Attempted to free invalid ID: 662734928609453
at: _free_internal (servers/rendering/rendering_device.cpp:4957)
This happened because ACCUMULATE and ACCUMULATE_SHARPEN passes shared
the same shader_version object but had different pipeline IDs. When
version_free was called for ACCUMULATE pass, it destroyed pipelines
created from that version, including the pipeline for the
ACCUMULATE_SHARPEN pass.
Using a unique version could work around this problem, but it's easier
to rely on version_free destroying the created pipelines through the
dependency mechanism.
(cherry picked from commit 0024cface56be436f6e5cd12d090333e8a6b3ef0)
Diffstat (limited to 'servers')
| -rw-r--r-- | servers/rendering/renderer_rd/effects/fsr2.cpp | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/servers/rendering/renderer_rd/effects/fsr2.cpp b/servers/rendering/renderer_rd/effects/fsr2.cpp index 925352a7d1..551ea5dd97 100644 --- a/servers/rendering/renderer_rd/effects/fsr2.cpp +++ b/servers/rendering/renderer_rd/effects/fsr2.cpp @@ -800,9 +800,6 @@ FSR2Effect::~FSR2Effect() { RD::get_singleton()->free(device.linear_clamp_sampler); for (uint32_t i = 0; i < FFX_FSR2_PASS_COUNT; i++) { - if (device.passes[i].pipeline.pipeline_rid.is_valid()) { - RD::get_singleton()->free(device.passes[i].pipeline.pipeline_rid); - } device.passes[i].shader->version_free(device.passes[i].shader_version); } } |
