87 const std::shared_ptr<const FieldInputs> &
field_inputs()
const;
115 operator bool()
const
117 return node_ !=
nullptr;
206 static_assert(std::is_same_v<T, U>);
217static constexpr bool is_field_v = std::is_base_of_v<detail::TypedFieldBase, T> &&
218 !std::is_same_v<detail::TypedFieldBase, T>;
228 std::shared_ptr<const mf::MultiFunction> owned_function_;
229 const mf::MultiFunction *function_;
244 static std::shared_ptr<FieldOperation>
Create(std::shared_ptr<const mf::MultiFunction> function,
249 static std::shared_ptr<FieldOperation>
Create(
const mf::MultiFunction &function,
339 struct OutputPointerInfo {
353 bool is_evaluated_ =
false;
361 : context_(context), mask_(*
mask)
367 : context_(context), mask_(scope_.construct<
IndexMask>(
size))
431 const int field_index = fields_to_evaluate_.append_and_get_index(std::move(field));
432 dst_varrays_.append({});
433 output_pointer_infos_.append(OutputPointerInfo{
453 return evaluated_varrays_[field_index];
492 const FieldContext &context,
573 return this == &other;
604 int output_counter = 0;
605 for (
const int param_index : function_->param_indices()) {
606 mf::ParamType param_type = function_->param_type(param_index);
607 if (param_type.is_output()) {
608 if (output_counter == output_index) {
609 return param_type.data_type().single_type();
#define BLI_assert_unreachable()
#define UNUSED_VARS_NDEBUG(...)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static const CPPType & get()
VArray< T > typed() const
NonCopyable(const NonCopyable &other)=delete
NonMovable(NonMovable &&other)=delete
static VMutableArray ForSpan(MutableSpan< T > values)
FieldConstant(const CPPType &type, const void *value)
const CPPType & type() const
const CPPType & output_cpp_type(int output_index) const override
virtual GVArray get_varray_for_input(const FieldInput &field_input, const IndexMask &mask, ResourceScope &scope) const
virtual ~FieldContext()=default
FieldEvaluator(const FieldContext &context, const int64_t size)
FieldEvaluator(const FieldContext &context, const IndexMask *mask)
void set_selection(Field< bool > selection)
int add(GField field, GVArray *varray_ptr)
IndexMask get_evaluated_as_mask(int field_index)
int add(Field< T > field, VArray< T > *varray_ptr)
IndexMask get_evaluated_selection_as_mask() const
int add_with_destination(Field< T > field, MutableSpan< T > dst)
VArray< T > get_evaluated(const int field_index)
int add_with_destination(GField field, GVMutableArray dst)
const GVArray & get_evaluated(const int field_index) const
int add_with_destination(Field< T > field, VMutableArray< T > dst)
FieldNodeType node_type() const
virtual void for_each_field_input_recursive(FunctionRef< void(const FieldInput &)> fn) const
std::shared_ptr< const FieldInputs > field_inputs_
virtual bool is_equal_to(const FieldNode &other) const
virtual uint64_t hash() const
virtual const CPPType & output_cpp_type(int output_index) const =0
FieldNode(FieldNodeType node_type)
bool depends_on_input() const
const std::shared_ptr< const FieldInputs > & field_inputs() const
static std::shared_ptr< FieldOperation > Create(std::shared_ptr< const mf::MultiFunction > function, Vector< GField > inputs={})
Span< GField > inputs() const
static std::shared_ptr< FieldOperation > Create(const mf::MultiFunction &function, Vector< GField > inputs={})
FieldOperation(std::shared_ptr< const mf::MultiFunction > function, Vector< GField > inputs={})
const CPPType & output_cpp_type(int output_index) const override
const mf::MultiFunction & multi_function() const
Field(std::shared_ptr< FieldNode > node, const int node_output_index=0)
GFieldBase(NodePtr node, const int node_output_index)
const CPPType & cpp_type() const
const FieldNode & node() const
int node_output_index() const
friend bool operator==(const GFieldBase &a, const GFieldBase &b)
GFieldRef(const FieldNode &node, const int node_output_index=0)
GFieldRef(const GField &field)
GField(std::shared_ptr< FieldNode > node, const int node_output_index=0)
local_group_size(16, 16) .push_constant(Type b
ccl_device_inline float4 mask(const int4 mask, const float4 a)
bool operator==(const FieldNode &a, const FieldNode &b)
bool operator!=(const FieldNode &a, const FieldNode &b)
GField make_constant_field(const CPPType &type, const void *value)
Vector< GVArray > evaluate_fields(ResourceScope &scope, Span< GFieldRef > fields_to_evaluate, const IndexMask &mask, const FieldContext &context, Span< GVMutableArray > dst_varrays={})
GField make_field_constant_if_possible(GField field)
Field< bool > invert_boolean_field(const Field< bool > &field)
void evaluate_constant_field(const GField &field, void *r_value)
static constexpr bool is_field_v
uint64_t get_default_hash(const T &v)
static blender::bke::bNodeSocketTemplate inputs[]
GPU_SHADER_INTERFACE_INFO(overlay_edit_curve_handle_iface, "vert").flat(Type pos vertex_in(1, Type::UINT, "data") .vertex_out(overlay_edit_curve_handle_iface) .geometry_layout(PrimitiveIn Frequency::GEOMETRY storage_buf(1, Qualifier::READ, "uint", "data[]", Frequency::GEOMETRY) .push_constant(Type Frequency::GEOMETRY selection[]
unsigned __int64 uint64_t