From 3732508c64ad51c77a6fb83a2444af104d95cfd9 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 15 Jan 2021 17:21:14 +0100 Subject: Fix T84745: build error with TBB 2021 task_group::is_canceling() was removed. --- source/blender/blenlib/BLI_task.h | 6 ++++-- source/blender/blenlib/intern/task_pool.cc | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'source') diff --git a/source/blender/blenlib/BLI_task.h b/source/blender/blenlib/BLI_task.h index a3805f71316..9e61686b37a 100644 --- a/source/blender/blenlib/BLI_task.h +++ b/source/blender/blenlib/BLI_task.h @@ -105,8 +105,10 @@ void BLI_task_pool_work_and_wait(TaskPool *pool); /* cancel all tasks, keep worker threads running */ void BLI_task_pool_cancel(TaskPool *pool); -/* for worker threads, test if canceled */ -bool BLI_task_pool_canceled(TaskPool *pool); +/* for worker threads, test if current task pool canceled. this function may + * only be called from worker threads and pool must be the task pool that the + * thread is currently executing a task from. */ +bool BLI_task_pool_current_canceled(TaskPool *pool); /* optional userdata pointer to pass along to run function */ void *BLI_task_pool_user_data(TaskPool *pool); diff --git a/source/blender/blenlib/intern/task_pool.cc b/source/blender/blenlib/intern/task_pool.cc index dfed24da2d9..4b545c5647e 100644 --- a/source/blender/blenlib/intern/task_pool.cc +++ b/source/blender/blenlib/intern/task_pool.cc @@ -268,7 +268,7 @@ static bool tbb_task_pool_canceled(TaskPool *pool) { #ifdef WITH_TBB if (pool->use_threads) { - return pool->tbb_group.is_canceling(); + return tbb::is_current_task_group_canceling(); } #else UNUSED_VARS(pool); @@ -520,7 +520,7 @@ void BLI_task_pool_cancel(TaskPool *pool) } } -bool BLI_task_pool_canceled(TaskPool *pool) +bool BLI_task_pool_current_canceled(TaskPool *pool) { switch (pool->type) { case TASK_POOL_TBB: -- cgit v1.2.3 From 0b0e45252b11bbc1c0d96a3e04a4087d02f765e3 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Fri, 15 Jan 2021 11:04:32 -0600 Subject: Geometry Nodes: Use a default value in the point scale node This commit adds the ability to provide a default value to `attribute_try_get_for_output` and uses it for the `Point Scale` node, which is important because the node uses multiplication. The idea is to keep "name-specific" functionality in nodes rather than in the attribute API, otherwise the complexity will be hard to keep track of. So this fix doesn't apply to the Attribute Vector Math node, but hopfully that is okay since that's now a lower level node for this purpose anyway. Differential Revision: https://developer.blender.org/D10115 --- source/blender/blenkernel/BKE_geometry_set.hh | 6 ++++-- source/blender/blenkernel/intern/attribute_access.cc | 8 +++++++- source/blender/nodes/geometry/nodes/node_geo_point_scale.cc | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/BKE_geometry_set.hh b/source/blender/blenkernel/BKE_geometry_set.hh index 57fad6bcdf6..391bd243edf 100644 --- a/source/blender/blenkernel/BKE_geometry_set.hh +++ b/source/blender/blenkernel/BKE_geometry_set.hh @@ -242,7 +242,8 @@ class GeometryComponent { /** * If an attribute with the given params exist, it is returned. - * If no attribute with the given name exists, it is created and returned. + * If no attribute with the given name exists, create it and + * fill it with the default value if it is provided. * If an attribute with the given name but different domain or type exists, a temporary attribute * is created that has to be saved after the output has been computed. This avoids deleting * another attribute, before a computation is finished. @@ -251,7 +252,8 @@ class GeometryComponent { */ OutputAttributePtr attribute_try_get_for_output(const blender::StringRef attribute_name, const AttributeDomain domain, - const CustomDataType data_type); + const CustomDataType data_type, + const void *default_value = nullptr); }; template diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc index 6739294a2c4..a7939beae90 100644 --- a/source/blender/blenkernel/intern/attribute_access.cc +++ b/source/blender/blenkernel/intern/attribute_access.cc @@ -814,7 +814,8 @@ blender::bke::ReadAttributePtr GeometryComponent::attribute_get_constant_for_rea OutputAttributePtr GeometryComponent::attribute_try_get_for_output(const StringRef attribute_name, const AttributeDomain domain, - const CustomDataType data_type) + const CustomDataType data_type, + const void *default_value) { BLI_assert(this->attribute_domain_with_type_supported(domain, data_type)); @@ -827,6 +828,11 @@ OutputAttributePtr GeometryComponent::attribute_try_get_for_output(const StringR if (!attribute) { this->attribute_try_create(attribute_name, domain, data_type); attribute = this->attribute_try_get_for_write(attribute_name); + if (default_value != nullptr) { + void *data = attribute->get_span_for_write_only().data(); + cpp_type->fill_initialized(default_value, data, attribute->size()); + attribute->apply_span(); + } return OutputAttributePtr(std::move(attribute)); } diff --git a/source/blender/nodes/geometry/nodes/node_geo_point_scale.cc b/source/blender/nodes/geometry/nodes/node_geo_point_scale.cc index e5cbe27768d..47fca93d2ab 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_point_scale.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_point_scale.cc @@ -34,8 +34,9 @@ namespace blender::nodes { static void execute_on_component(GeoNodeExecParams params, GeometryComponent &component) { + static const float3 scale_default = float3(1.0f); OutputAttributePtr scale_attribute = component.attribute_try_get_for_output( - "scale", ATTR_DOMAIN_POINT, CD_PROP_FLOAT3); + "scale", ATTR_DOMAIN_POINT, CD_PROP_FLOAT3, &scale_default); ReadAttributePtr attribute = params.get_input_attribute( "Factor", component, ATTR_DOMAIN_POINT, CD_PROP_FLOAT3, nullptr); if (!attribute) { -- cgit v1.2.3