From a3457704fb63a59045b093dc4499b43f6676fabb Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Mon, 18 Oct 2021 20:13:37 -0500 Subject: Geometry Nodes: De-duplicate index input nodes during evaluation We do this in other nodes to reduce overhead of using the same node more than once. I don't think it will make a difference with index nodes currently, but at least it's consistent. --- source/blender/functions/FN_field.hh | 3 +++ source/blender/functions/intern/field.cc | 11 +++++++++++ 2 files changed, 14 insertions(+) (limited to 'source/blender/functions') diff --git a/source/blender/functions/FN_field.hh b/source/blender/functions/FN_field.hh index 2fca78fa6e7..78a49e342a5 100644 --- a/source/blender/functions/FN_field.hh +++ b/source/blender/functions/FN_field.hh @@ -421,6 +421,9 @@ class IndexFieldInput final : public FieldInput { const GVArray *get_varray_for_context(const FieldContext &context, IndexMask mask, ResourceScope &scope) const final; + + uint64_t hash() const override; + bool is_equal_to(const fn::FieldNode &other) const override; }; /** \} */ diff --git a/source/blender/functions/intern/field.cc b/source/blender/functions/intern/field.cc index 03af3f53065..1f7bad134a8 100644 --- a/source/blender/functions/intern/field.cc +++ b/source/blender/functions/intern/field.cc @@ -530,6 +530,17 @@ const GVArray *IndexFieldInput::get_varray_for_context(const fn::FieldContext &U mask.min_array_size(), mask.min_array_size(), index_func); } +uint64_t IndexFieldInput::hash() const +{ + /* Some random constant hash. */ + return 128736487678; +} + +bool IndexFieldInput::is_equal_to(const fn::FieldNode &other) const +{ + return dynamic_cast(&other) != nullptr; +} + /* -------------------------------------------------------------------- * FieldOperation. */ -- cgit v1.2.3