Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <mail@jlucke.com>2019-12-11 17:20:21 +0300
committerJacques Lucke <mail@jlucke.com>2019-12-11 17:20:21 +0300
commit3a1aec54a7d41d2569d65d9fe8baf825696a3095 (patch)
tree5ff1d02c299625442442ef448567f7de368c6ec0 /source/blender
parent2a25a0bd60f9de25868bc0fdc797fdbd7708a131 (diff)
cleanup
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/functions/FN_generic_virtual_list_list_ref.h13
-rw-r--r--source/blender/functions/intern/multi_functions/vectorize.cc37
2 files changed, 34 insertions, 16 deletions
diff --git a/source/blender/functions/FN_generic_virtual_list_list_ref.h b/source/blender/functions/FN_generic_virtual_list_list_ref.h
index 358b40ed780..a5dd0433bf4 100644
--- a/source/blender/functions/FN_generic_virtual_list_list_ref.h
+++ b/source/blender/functions/FN_generic_virtual_list_list_ref.h
@@ -76,6 +76,19 @@ class GenericVirtualListListRef {
return m_virtual_list_size;
}
+ uint sublist_size(uint index) const
+ {
+ BLI_assert(index < m_virtual_list_size);
+ switch (m_category) {
+ case Category::SingleArray:
+ return m_data.single_array.real_array_size;
+ case Category::FullArrayList:
+ return m_data.full_array_list.real_array_sizes[index];
+ }
+ BLI_assert(false);
+ return 0;
+ }
+
const CPPType &type() const
{
return *m_type;
diff --git a/source/blender/functions/intern/multi_functions/vectorize.cc b/source/blender/functions/intern/multi_functions/vectorize.cc
index 1a8f107b47e..9aba5a0f66a 100644
--- a/source/blender/functions/intern/multi_functions/vectorize.cc
+++ b/source/blender/functions/intern/multi_functions/vectorize.cc
@@ -1,7 +1,11 @@
#include "vectorize.h"
+#include "BLI_array_cxx.h"
+
namespace FN {
+using BLI::Array;
+
MF_SimpleVectorize::MF_SimpleVectorize(const MultiFunction &function,
ArrayRef<bool> input_is_vectorized)
: m_function(function), m_input_is_vectorized(input_is_vectorized)
@@ -48,32 +52,33 @@ MF_SimpleVectorize::MF_SimpleVectorize(const MultiFunction &function,
this->set_signature(signature);
}
-void MF_SimpleVectorize::call(MFMask mask, MFParams params, MFContext context) const
+static void get_vectorization_lengths(MFMask mask,
+ MFParams params,
+ ArrayRef<uint> vectorized_param_indices,
+ MutableArrayRef<int> r_lengths)
{
- if (mask.indices_amount() == 0) {
- return;
- }
- uint array_size = mask.min_array_size();
-
- Vector<int> vectorization_lengths(array_size);
- vectorization_lengths.fill_indices(mask.indices(), -1);
+ r_lengths.fill_indices(mask.indices(), -1);
- for (uint param_index : m_vectorized_inputs) {
+ for (uint param_index : vectorized_param_indices) {
GenericVirtualListListRef values = params.readonly_vector_input(param_index);
for (uint i : mask.indices()) {
- if (vectorization_lengths[i] != 0) {
- vectorization_lengths[i] = std::max<int>(vectorization_lengths[i], values[i].size());
+ if (r_lengths[i] != 0) {
+ uint sublist_size = values.sublist_size(i);
+ r_lengths[i] = std::max<int>(r_lengths[i], sublist_size);
}
}
}
+}
- Vector<GenericVectorArray *> output_vector_arrays;
- for (uint param_index : m_output_indices) {
- GenericVectorArray *vector_array = &params.vector_output(param_index,
- this->param_name(param_index));
- output_vector_arrays.append(vector_array);
+void MF_SimpleVectorize::call(MFMask mask, MFParams params, MFContext context) const
+{
+ if (mask.indices_amount() == 0) {
+ return;
}
+ Array<int> vectorization_lengths(mask.min_array_size());
+ get_vectorization_lengths(mask, params, m_vectorized_inputs, vectorization_lengths);
+
for (uint index : mask.indices()) {
uint length = vectorization_lengths[index];
MFParamsBuilder params_builder(m_function, length);