From d52412c5c3e00b4d8a185b56e82b52dd9b66ca71 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 12 Oct 2023 19:55:50 +0200 Subject: [PATCH] Fix particle emitter function cache clearing for GPU shader generation #1640 --- .../Graph/GPU/ParticleEmitterGraph.GPU.cpp | 24 +++++++++---------- .../Graph/GPU/ParticleEmitterGraph.GPU.h | 1 - 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.cpp b/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.cpp index 513252e80..48f1fb9a0 100644 --- a/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.cpp +++ b/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.cpp @@ -30,10 +30,10 @@ void ParticleEmitterGraphGPU::ClearCache() { for (int32 i = 0; i < Nodes.Count(); i++) { - auto& node = Nodes[i]; + ParticleEmitterGraphGPUNode& node = Nodes.Get()[i]; for (int32 j = 0; j < node.Boxes.Count(); j++) { - node.Boxes[j].Cache.Clear(); + node.Boxes.Get()[j].Cache.Clear(); } } } @@ -86,9 +86,7 @@ bool ParticleEmitterGPUGenerator::Generate(WriteStream& source, BytesContainer& auto& layout = baseGraph->Layout; _attributeValues.Resize(layout.Attributes.Count()); for (int32 i = 0; i < _attributeValues.Count(); i++) - { _attributeValues[i] = AttributeCache(); - } _contextUsesKill = false; // Cache attributes @@ -112,7 +110,7 @@ bool ParticleEmitterGPUGenerator::Generate(WriteStream& source, BytesContainer& for (int32 i = 0; i < baseGraph->InitModules.Count(); i++) { - ProcessModule(baseGraph->InitModules[i]); + ProcessModule(baseGraph->InitModules.Get()[i]); } WriteParticleAttributesWrites(); @@ -135,7 +133,7 @@ bool ParticleEmitterGPUGenerator::Generate(WriteStream& source, BytesContainer& for (int32 i = 0; i < baseGraph->UpdateModules.Count(); i++) { - ProcessModule(baseGraph->UpdateModules[i]); + ProcessModule(baseGraph->UpdateModules.Get()[i]); } // Dead particles removal @@ -321,22 +319,22 @@ void ParticleEmitterGPUGenerator::clearCache() // Reset cached boxes values for (int32 i = 0; i < _graphs.Count(); i++) { - _graphs[i]->ClearCache(); + _graphs.Get()[i]->ClearCache(); } - for (auto& e : _functions) + for (const auto& e : _functions) { - for (auto& node : e.Value->Nodes) + auto& nodes = ((ParticleEmitterGraphGPU*)e.Value)->Nodes; + for (int32 i = 0; i < nodes.Count(); i++) { + ParticleEmitterGraphGPUNode& node = nodes.Get()[i]; for (int32 j = 0; j < node.Boxes.Count(); j++) - node.Boxes[j].Cache.Clear(); + node.Boxes.Get()[j].Cache.Clear(); } } // Reset cached attributes for (int32 i = 0; i < _attributeValues.Count(); i++) - { - _attributeValues[i] = AttributeCache(); - } + _attributeValues.Get()[i] = AttributeCache(); _contextUsesKill = false; } diff --git a/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.h b/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.h index 82f9c2c93..5b94d94c5 100644 --- a/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.h +++ b/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.h @@ -94,7 +94,6 @@ public: /// /// Gets the root graph. /// - /// The base graph. FORCE_INLINE ParticleEmitterGraphGPU* GetRootGraph() const { return _graphs.First();