Example #1
0
 def store(self, index, value):
     args_group = ()
     if self.num_dims == 1:
         args_group = impl.make_expr_group(index.x, value.r, value.g,
                                           value.b, value.a)
     elif self.num_dims == 2:
         args_group = impl.make_expr_group(index.x, index.y, value.r,
                                           value.g, value.b, value.a)
     elif self.num_dims == 3:
         args_group = impl.make_expr_group(index.x, index.y, index.z,
                                           value.r, value.g, value.b,
                                           value.a)
     impl.expr_init(
         _ti_core.make_texture_op_expr(_ti_core.TextureOpType.kStore,
                                       self.ptr_expr, args_group))
Example #2
0
    def __init__(self, mesh: MeshInstance, element_type: MeshElementType,
                 entry_expr: impl.Expr):
        self.mesh = mesh
        self.element_type = element_type
        self.entry_expr = entry_expr

        element_field = self.mesh.fields[self.element_type]
        for key, attr in element_field.field_dict.items():
            global_entry_expr = impl.Expr(
                _ti_core.get_index_conversion(
                    self.mesh.mesh_ptr, element_type, entry_expr,
                    ConvType.l2r if element_field.attr_dict[key].reorder else
                    ConvType.l2g))  # transform index space
            global_entry_expr_group = impl.make_expr_group(
                *tuple([global_entry_expr]))
            if isinstance(attr, MatrixField):
                setattr(
                    self, key,
                    _IntermediateMatrix(attr.n, attr.m, [
                        impl.Expr(
                            _ti_core.subscript(e.ptr, global_entry_expr_group))
                        for e in attr.get_field_members()
                    ]))
            elif isinstance(attr, StructField):
                raise RuntimeError('ti.Mesh has not support StructField yet')
            else:  # isinstance(attr, Field)
                var = attr.get_field_members()[0].ptr
                setattr(
                    self, key,
                    impl.Expr(_ti_core.subscript(var,
                                                 global_entry_expr_group)))

        for element_type in self.mesh._type.elements:
            setattr(self, element_type_name(element_type),
                    impl.mesh_relation_access(self.mesh, self, element_type))
Example #3
0
 def func_call_rvalue(self, key, args):
     # Skip the template args, e.g., |self|
     assert impl.get_runtime().experimental_real_function
     non_template_args = []
     for i in range(len(self.argument_annotations)):
         if not isinstance(self.argument_annotations[i], template):
             non_template_args.append(args[i])
     non_template_args = impl.make_expr_group(non_template_args)
     return ti.Expr(
         _ti_core.make_func_call_expr(
             self.taichi_functions[key.instance_id], non_template_args))
Example #4
0
 def func_call_rvalue(self, key, args):
     # Skip the template args, e.g., |self|
     assert self.is_real_function
     non_template_args = []
     for i, anno in enumerate(self.argument_annotations):
         if not isinstance(anno, template):
             if id(anno) in primitive_types.type_ids:
                 non_template_args.append(ops.cast(args[i], anno))
             else:
                 non_template_args.append(args[i])
     non_template_args = impl.make_expr_group(non_template_args)
     return Expr(
         _ti_core.make_func_call_expr(
             self.taichi_functions[key.instance_id], non_template_args))
Example #5
0
 def fetch(self, index, lod):
     args_group = ()
     if self.num_dims == 1:
         args_group = impl.make_expr_group(index.x, lod)
     elif self.num_dims == 2:
         args_group = impl.make_expr_group(index.x, index.y, lod)
     elif self.num_dims == 3:
         args_group = impl.make_expr_group(index.x, index.y, index.z, lod)
     v = _ti_core.make_texture_op_expr(_ti_core.TextureOpType.fetch_texel,
                                       self.ptr_expr, args_group)
     r = impl.call_internal("composite_extract_0",
                            v,
                            with_runtime_context=False)
     g = impl.call_internal("composite_extract_1",
                            v,
                            with_runtime_context=False)
     b = impl.call_internal("composite_extract_2",
                            v,
                            with_runtime_context=False)
     a = impl.call_internal("composite_extract_3",
                            v,
                            with_runtime_context=False)
     return ti.Vector([r, g, b, a])
Example #6
0
 def sample_lod(self, uv, lod):
     args_group = ()
     if self.num_dims == 1:
         args_group = (uv.x, lod)
     elif self.num_dims == 2:
         args_group = impl.make_expr_group(uv.x, uv.y, lod)
     elif self.num_dims == 3:
         args_group = impl.make_expr_group(uv.x, uv.y, uv.z, lod)
     v = _ti_core.make_texture_op_expr(_ti_core.TextureOpType.sample_lod,
                                       self.ptr_expr, args_group)
     r = impl.call_internal("composite_extract_0",
                            v,
                            with_runtime_context=False)
     g = impl.call_internal("composite_extract_1",
                            v,
                            with_runtime_context=False)
     b = impl.call_internal("composite_extract_2",
                            v,
                            with_runtime_context=False)
     a = impl.call_internal("composite_extract_3",
                            v,
                            with_runtime_context=False)
     return ti.Vector([r, g, b, a])