Halide  17.0.2
Halide compiler and libraries
Halide::Buffer< T, Dims > Class Template Reference

A Halide::Buffer is a named shared reference to a Halide::Runtime::Buffer. More...

#include <Argument.h>

Public Types

typedef T ElemType
 

Public Member Functions

virtual ~Buffer ()=default
 
 Buffer ()=default
 Make a null Buffer, which points to no Runtime::Buffer. More...
 
 Buffer (const Buffer &that)=default
 Trivial copy constructor. More...
 
Bufferoperator= (const Buffer &that)=default
 Trivial copy assignment operator. More...
 
Bufferoperator= (Buffer &&) noexcept=default
 Trivial move assignment operator. More...
 
template<typename T2 , int D2>
 Buffer (const Buffer< T2, D2 > &other)
 Make a Buffer from a Buffer of a different type. More...
 
template<typename T2 , int D2>
 Buffer (Buffer< T2, D2 > &&other) noexcept
 Move construct from a Buffer of a different type. More...
 
template<int D2>
 Buffer (Runtime::Buffer< T, D2 > &&buf, const std::string &name="")
 Construct a Buffer that captures and owns an rvalue Runtime::Buffer. More...
 
template<typename T2 , int D2>
bool same_as (const Buffer< T2, D2 > &other) const
 Check if two Buffer objects point to the same underlying Buffer. More...
 
bool defined () const
 Check if this Buffer refers to an existing Buffer. More...
 
int copy_to_device (const Target &t=get_jit_target_from_environment(), JITUserContext *context=nullptr)
 Copy to the GPU, using the device API that is the default for the given Target. More...
 
int copy_to_device (const DeviceAPI &d, const Target &t=get_jit_target_from_environment(), JITUserContext *context=nullptr)
 Copy to the GPU, using the given device API. More...
 
int device_malloc (const Target &t=get_jit_target_from_environment(), JITUserContext *context=nullptr)
 Allocate on the GPU, using the device API that is the default for the given Target. More...
 
int device_malloc (const DeviceAPI &d, const Target &t=get_jit_target_from_environment(), JITUserContext *context=nullptr)
 Allocate storage on the GPU, using the given device API. More...
 
int device_wrap_native (const DeviceAPI &d, uint64_t handle, const Target &t=get_jit_target_from_environment(), JITUserContext *context=nullptr)
 Wrap a native handle, using the given device API. More...
 
void set_name (const std::string &n)
 Buffers are optionally named. More...
 
const std::string & name () const
 Buffers are optionally named. More...
 
Runtime::Buffer< T, Dims > * get ()
 Get a pointer to the underlying Runtime::Buffer. More...
 
const Runtime::Buffer< T, Dims > * get () const
 Get a pointer to the underlying Runtime::Buffer. More...
 
template<typename... Args>
const Expr operator() (const Expr &first, Args... rest) const
 Make an Expr that loads from this concrete buffer at a computed coordinate. More...
 
template<typename... Args>
const Expr operator() (const std::vector< Expr > &args) const
 Make an Expr that loads from this concrete buffer at a computed coordinate. More...
 

Static Public Attributes

static constexpr int AnyDims = Halide::AnyDims
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (Type t, int first, Args... rest)
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (const halide_buffer_t &buf, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (int first, Args... rest)
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (Type t, const std::vector< int > &sizes, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (Type t, const std::vector< int > &sizes, const std::vector< int > &storage_order, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (const std::vector< int > &sizes, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (const std::vector< int > &sizes, const std::vector< int > &storage_order, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
template<typename Array , size_t N>
 Buffer (Array(&vals)[N], const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, int first, Args &&...rest)
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, const std::vector< int > &sizes, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (T *data, int first, Args &&...rest)
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (T *data, const std::vector< int > &sizes, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, const std::vector< int > &sizes, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, int d, const halide_dimension_t *shape, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (T *data, int d, const halide_dimension_t *shape, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static Buffer< T, Dims > make_scalar (const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static Buffer make_scalar (Type t, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static Buffer< T, Dims > make_scalar (T *data, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static Buffer< T, Dims > make_interleaved (int width, int height, int channels, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static Buffer make_interleaved (Type t, int width, int height, int channels, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static Buffer< T, Dims > make_interleaved (T *data, int width, int height, int channels, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static Buffer< Internal::add_const_if_T_is_const< T, void > > make_interleaved (Type t, T *data, int width, int height, int channels, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
template<typename T2 , int D2>
static Buffer< T, Dims > make_with_shape_of (Buffer< T2, D2 > src, void *(*allocate_fn)(size_t)=nullptr, void(*deallocate_fn)(void *)=nullptr, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
template<typename T2 , int D2>
static Buffer< T, Dims > make_with_shape_of (const Runtime::Buffer< T2, D2 > &src, void *(*allocate_fn)(size_t)=nullptr, void(*deallocate_fn)(void *)=nullptr, const std::string &name="")
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
static constexpr bool has_static_halide_type = Runtime::Buffer<T, Dims>::has_static_halide_type
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
static constexpr bool has_static_dimensions = Runtime::Buffer<T, Dims>::has_static_dimensions
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename Fn , typename... Args>
Buffer< T, Dims > & for_each_value (Fn &&f, Args... other_buffers)
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename Fn , typename... Args>
const Buffer< T, Dims > & for_each_value (Fn &&f, Args... other_buffers) const
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename Fn >
Buffer< T, Dims > & for_each_element (Fn &&f)
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename Fn >
const Buffer< T, Dims > & for_each_element (Fn &&f) const
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename FnOrValue >
Buffer< T, Dims > & fill (FnOrValue &&f)
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
Type type () const
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename T2 , int D2 = Dims>
Buffer< T2, D2 > as () const
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
Buffer< T, Dims > copy () const
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename T2 , int D2>
void copy_from (const Buffer< T2, D2 > &other)
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename... Args>
auto operator() (int first, Args &&...args) -> decltype(std::declval< Runtime::Buffer< T, Dims >>()(first, std::forward< Args >(args)...))
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename... Args>
auto operator() (int first, Args &&...args) const -> decltype(std::declval< const Runtime::Buffer< T, Dims >>()(first, std::forward< Args >(args)...))
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
auto operator() (const int *pos) -> decltype(std::declval< Runtime::Buffer< T, Dims >>()(pos))
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
auto operator() (const int *pos) const -> decltype(std::declval< const Runtime::Buffer< T, Dims >>()(pos))
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
auto operator() () -> decltype(std::declval< Runtime::Buffer< T, Dims >>()())
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
auto operator() () const -> decltype(std::declval< const Runtime::Buffer< T, Dims >>()())
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
static constexpr halide_type_t static_halide_type ()
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
static constexpr int static_dimensions ()
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename T2 , int D2>
static bool can_convert_from (const Buffer< T2, D2 > &other)
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 

Detailed Description

template<typename T, int Dims>
class Halide::Buffer< T, Dims >

A Halide::Buffer is a named shared reference to a Halide::Runtime::Buffer.

A Buffer<T1, D> can refer to a Buffer<T2, D> if T1 is const whenever T2 is const, and either T1 = T2 or T1 is void. A Buffer<void, D> can refer to any Buffer of any non-const type, and the default template parameter is T = void.

A Buffer<T, D1> can refer to a Buffer<T, D2> if D1 == D2, or if D1 is AnyDims (meaning "dimensionality is checked at runtime, not compiletime").

Examples:
tutorial/lesson_01_basics.cpp, tutorial/lesson_02_input_image.cpp, tutorial/lesson_03_debugging_1.cpp, tutorial/lesson_04_debugging_2.cpp, tutorial/lesson_05_scheduling_1.cpp, tutorial/lesson_06_realizing_over_shifted_domains.cpp, tutorial/lesson_07_multi_stage_pipelines.cpp, tutorial/lesson_08_scheduling_2.cpp, tutorial/lesson_09_update_definitions.cpp, tutorial/lesson_12_using_the_gpu.cpp, and tutorial/lesson_13_tuples.cpp.

Definition at line 16 of file Argument.h.

Member Typedef Documentation

◆ ElemType

template<typename T, int Dims>
typedef T Halide::Buffer< T, Dims >::ElemType

Definition at line 159 of file Buffer.h.

Constructor & Destructor Documentation

◆ ~Buffer()

template<typename T, int Dims>
virtual Halide::Buffer< T, Dims >::~Buffer ( )
virtualdefault

◆ Buffer() [1/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( )
default

Make a null Buffer, which points to no Runtime::Buffer.

◆ Buffer() [2/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( const Buffer< T, Dims > &  that)
default

Trivial copy constructor.

◆ Buffer() [3/20]

template<typename T, int Dims>
template<typename T2 , int D2>
Halide::Buffer< T, Dims >::Buffer ( const Buffer< T2, D2 > &  other)
inline

Make a Buffer from a Buffer of a different type.

Definition at line 181 of file Buffer.h.

◆ Buffer() [4/20]

template<typename T, int Dims>
template<typename T2 , int D2>
Halide::Buffer< T, Dims >::Buffer ( Buffer< T2, D2 > &&  other)
inlinenoexcept

Move construct from a Buffer of a different type.

Definition at line 188 of file Buffer.h.

◆ Buffer() [5/20]

template<typename T, int Dims>
template<int D2>
Halide::Buffer< T, Dims >::Buffer ( Runtime::Buffer< T, D2 > &&  buf,
const std::string &  name = "" 
)
inline

Construct a Buffer that captures and owns an rvalue Runtime::Buffer.

Definition at line 195 of file Buffer.h.

◆ Buffer() [6/20]

template<typename T, int Dims>
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T, Dims >::Buffer ( Type  t,
int  first,
Args...  rest 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 212 of file Buffer.h.

◆ Buffer() [7/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( const halide_buffer_t buf,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 218 of file Buffer.h.

◆ Buffer() [8/20]

template<typename T, int Dims>
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T, Dims >::Buffer ( int  first,
Args...  rest 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 225 of file Buffer.h.

◆ Buffer() [9/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( Type  t,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 230 of file Buffer.h.

◆ Buffer() [10/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( Type  t,
const std::vector< int > &  sizes,
const std::vector< int > &  storage_order,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 236 of file Buffer.h.

◆ Buffer() [11/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 243 of file Buffer.h.

◆ Buffer() [12/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( const std::vector< int > &  sizes,
const std::vector< int > &  storage_order,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 248 of file Buffer.h.

◆ Buffer() [13/20]

template<typename T, int Dims>
template<typename Array , size_t N>
Halide::Buffer< T, Dims >::Buffer ( Array(&)  vals[N],
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 255 of file Buffer.h.

◆ Buffer() [14/20]

template<typename T, int Dims>
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T, Dims >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
int  first,
Args &&...  rest 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 262 of file Buffer.h.

◆ Buffer() [15/20]

template<typename T, int Dims>
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T, Dims >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 271 of file Buffer.h.

◆ Buffer() [16/20]

template<typename T, int Dims>
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T, Dims >::Buffer ( T *  data,
int  first,
Args &&...  rest 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 280 of file Buffer.h.

◆ Buffer() [17/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( T *  data,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 286 of file Buffer.h.

◆ Buffer() [18/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 292 of file Buffer.h.

◆ Buffer() [19/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
int  d,
const halide_dimension_t shape,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 299 of file Buffer.h.

◆ Buffer() [20/20]

template<typename T, int Dims>
Halide::Buffer< T, Dims >::Buffer ( T *  data,
int  d,
const halide_dimension_t shape,
const std::string &  name = "" 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 307 of file Buffer.h.

Member Function Documentation

◆ operator=() [1/2]

template<typename T, int Dims>
Buffer& Halide::Buffer< T, Dims >::operator= ( const Buffer< T, Dims > &  that)
default

Trivial copy assignment operator.

◆ operator=() [2/2]

template<typename T, int Dims>
Buffer& Halide::Buffer< T, Dims >::operator= ( Buffer< T, Dims > &&  )
defaultnoexcept

Trivial move assignment operator.

◆ make_scalar() [1/3]

template<typename T, int Dims>
static Buffer<T, Dims> Halide::Buffer< T, Dims >::make_scalar ( const std::string &  name = "")
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 314 of file Buffer.h.

◆ make_scalar() [2/3]

template<typename T, int Dims>
static Buffer Halide::Buffer< T, Dims >::make_scalar ( Type  t,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 318 of file Buffer.h.

◆ make_scalar() [3/3]

template<typename T, int Dims>
static Buffer<T, Dims> Halide::Buffer< T, Dims >::make_scalar ( T *  data,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 322 of file Buffer.h.

◆ make_interleaved() [1/4]

template<typename T, int Dims>
static Buffer<T, Dims> Halide::Buffer< T, Dims >::make_interleaved ( int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 326 of file Buffer.h.

◆ make_interleaved() [2/4]

template<typename T, int Dims>
static Buffer Halide::Buffer< T, Dims >::make_interleaved ( Type  t,
int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 330 of file Buffer.h.

◆ make_interleaved() [3/4]

template<typename T, int Dims>
static Buffer<T, Dims> Halide::Buffer< T, Dims >::make_interleaved ( T *  data,
int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 334 of file Buffer.h.

◆ make_interleaved() [4/4]

template<typename T, int Dims>
static Buffer<Internal::add_const_if_T_is_const<T, void> > Halide::Buffer< T, Dims >::make_interleaved ( Type  t,
T *  data,
int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 339 of file Buffer.h.

◆ make_with_shape_of() [1/2]

template<typename T, int Dims>
template<typename T2 , int D2>
static Buffer<T, Dims> Halide::Buffer< T, Dims >::make_with_shape_of ( Buffer< T2, D2 >  src,
void *(*)(size_t allocate_fn = nullptr,
void(*)(void *)  deallocate_fn = nullptr,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 345 of file Buffer.h.

◆ make_with_shape_of() [2/2]

template<typename T, int Dims>
template<typename T2 , int D2>
static Buffer<T, Dims> Halide::Buffer< T, Dims >::make_with_shape_of ( const Runtime::Buffer< T2, D2 > &  src,
void *(*)(size_t allocate_fn = nullptr,
void(*)(void *)  deallocate_fn = nullptr,
const std::string &  name = "" 
)
inlinestatic

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 353 of file Buffer.h.

◆ set_name()

template<typename T, int Dims>
void Halide::Buffer< T, Dims >::set_name ( const std::string &  n)
inline

Buffers are optionally named.

Definition at line 363 of file Buffer.h.

◆ name()

template<typename T, int Dims>
const std::string& Halide::Buffer< T, Dims >::name ( ) const
inline

◆ same_as()

template<typename T, int Dims>
template<typename T2 , int D2>
bool Halide::Buffer< T, Dims >::same_as ( const Buffer< T2, D2 > &  other) const
inline

Check if two Buffer objects point to the same underlying Buffer.

Definition at line 374 of file Buffer.h.

◆ defined()

template<typename T, int Dims>
bool Halide::Buffer< T, Dims >::defined ( ) const
inline

Check if this Buffer refers to an existing Buffer.

Default-constructed Buffer objects do not refer to any existing Buffer.

Definition at line 381 of file Buffer.h.

◆ get() [1/2]

template<typename T, int Dims>
Runtime::Buffer<T, Dims>* Halide::Buffer< T, Dims >::get ( )
inline

Get a pointer to the underlying Runtime::Buffer.

Definition at line 387 of file Buffer.h.

◆ get() [2/2]

template<typename T, int Dims>
const Runtime::Buffer<T, Dims>* Halide::Buffer< T, Dims >::get ( ) const
inline

Get a pointer to the underlying Runtime::Buffer.

Definition at line 391 of file Buffer.h.

◆ for_each_value() [1/2]

template<typename T, int Dims>
template<typename Fn , typename... Args>
Buffer<T, Dims>& Halide::Buffer< T, Dims >::for_each_value ( Fn &&  f,
Args...  other_buffers 
)
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 483 of file Buffer.h.

Referenced by Halide::Buffer< void >::for_each_value().

◆ for_each_value() [2/2]

template<typename T, int Dims>
template<typename Fn , typename... Args>
const Buffer<T, Dims>& Halide::Buffer< T, Dims >::for_each_value ( Fn &&  f,
Args...  other_buffers 
) const
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 489 of file Buffer.h.

◆ for_each_element() [1/2]

template<typename T, int Dims>
template<typename Fn >
Buffer<T, Dims>& Halide::Buffer< T, Dims >::for_each_element ( Fn &&  f)
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 495 of file Buffer.h.

Referenced by Halide::Buffer< void >::for_each_element().

◆ for_each_element() [2/2]

template<typename T, int Dims>
template<typename Fn >
const Buffer<T, Dims>& Halide::Buffer< T, Dims >::for_each_element ( Fn &&  f) const
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 501 of file Buffer.h.

◆ fill()

template<typename T, int Dims>
template<typename FnOrValue >
Buffer<T, Dims>& Halide::Buffer< T, Dims >::fill ( FnOrValue &&  f)
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 507 of file Buffer.h.

Referenced by Halide::Buffer< void >::fill().

◆ static_halide_type()

template<typename T, int Dims>
static constexpr halide_type_t Halide::Buffer< T, Dims >::static_halide_type ( )
inlinestatic

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 514 of file Buffer.h.

◆ static_dimensions()

template<typename T, int Dims>
static constexpr int Halide::Buffer< T, Dims >::static_dimensions ( )
inlinestatic

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 520 of file Buffer.h.

◆ can_convert_from()

template<typename T, int Dims>
template<typename T2 , int D2>
static bool Halide::Buffer< T, Dims >::can_convert_from ( const Buffer< T2, D2 > &  other)
inlinestatic

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 525 of file Buffer.h.

◆ type()

template<typename T, int Dims>
Type Halide::Buffer< T, Dims >::type ( ) const
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 533 of file Buffer.h.

Referenced by Halide::Internal::Call::make(), and Halide::Internal::GeneratorOutput_Buffer< T >::operator=().

◆ as()

template<typename T, int Dims>
template<typename T2 , int D2 = Dims>
Buffer<T2, D2> Halide::Buffer< T, Dims >::as ( ) const
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 538 of file Buffer.h.

◆ copy()

template<typename T, int Dims>
Buffer<T, Dims> Halide::Buffer< T, Dims >::copy ( ) const
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 542 of file Buffer.h.

◆ copy_from()

template<typename T, int Dims>
template<typename T2 , int D2>
void Halide::Buffer< T, Dims >::copy_from ( const Buffer< T2, D2 > &  other)
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 547 of file Buffer.h.

◆ operator()() [1/8]

template<typename T, int Dims>
template<typename... Args>
auto Halide::Buffer< T, Dims >::operator() ( int  first,
Args &&...  args 
) -> decltype(std::declval<Runtime::Buffer<T, Dims>>()(first, std::forward<Args>(args)...))
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 552 of file Buffer.h.

◆ operator()() [2/8]

template<typename T, int Dims>
template<typename... Args>
auto Halide::Buffer< T, Dims >::operator() ( int  first,
Args &&...  args 
) const -> decltype(std::declval<const Runtime::Buffer<T, Dims>>()(first, std::forward<Args>(args)...))
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 557 of file Buffer.h.

◆ operator()() [3/8]

template<typename T, int Dims>
auto Halide::Buffer< T, Dims >::operator() ( const int *  pos) -> decltype(std::declval<Runtime::Buffer<T, Dims>>()(pos))
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 561 of file Buffer.h.

◆ operator()() [4/8]

template<typename T, int Dims>
auto Halide::Buffer< T, Dims >::operator() ( const int *  pos) const -> decltype(std::declval<const Runtime::Buffer<T, Dims>>()(pos))
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 565 of file Buffer.h.

◆ operator()() [5/8]

template<typename T, int Dims>
auto Halide::Buffer< T, Dims >::operator() ( ) -> decltype(std::declval<Runtime::Buffer<T, Dims>>()())
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 569 of file Buffer.h.

◆ operator()() [6/8]

template<typename T, int Dims>
auto Halide::Buffer< T, Dims >::operator() ( ) const -> decltype(std::declval<const Runtime::Buffer<T, Dims>>()())
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 573 of file Buffer.h.

◆ operator()() [7/8]

template<typename T, int Dims>
template<typename... Args>
const Expr Halide::Buffer< T, Dims >::operator() ( const Expr first,
Args...  rest 
) const
inline

Make an Expr that loads from this concrete buffer at a computed coordinate.

Returned Expr is const so that it's not possible to accidentally treat a buffer like a Func and try to assign an Expr to a given symbolic coordinate.

Definition at line 584 of file Buffer.h.

◆ operator()() [8/8]

template<typename T, int Dims>
template<typename... Args>
const Expr Halide::Buffer< T, Dims >::operator() ( const std::vector< Expr > &  args) const
inline

Make an Expr that loads from this concrete buffer at a computed coordinate.

Returned Expr is const so that it's not possible to accidentally treat a buffer like a Func and try to assign an Expr to a given symbolic coordinate.

Definition at line 590 of file Buffer.h.

◆ copy_to_device() [1/2]

template<typename T, int Dims>
int Halide::Buffer< T, Dims >::copy_to_device ( const Target t = get_jit_target_from_environment(),
JITUserContext context = nullptr 
)
inline

Copy to the GPU, using the device API that is the default for the given Target.

Definition at line 596 of file Buffer.h.

Referenced by Halide::Buffer< void >::copy_to_device().

◆ copy_to_device() [2/2]

template<typename T, int Dims>
int Halide::Buffer< T, Dims >::copy_to_device ( const DeviceAPI d,
const Target t = get_jit_target_from_environment(),
JITUserContext context = nullptr 
)
inline

Copy to the GPU, using the given device API.

Definition at line 601 of file Buffer.h.

◆ device_malloc() [1/2]

template<typename T, int Dims>
int Halide::Buffer< T, Dims >::device_malloc ( const Target t = get_jit_target_from_environment(),
JITUserContext context = nullptr 
)
inline

Allocate on the GPU, using the device API that is the default for the given Target.

Definition at line 606 of file Buffer.h.

Referenced by Halide::Buffer< void >::device_malloc().

◆ device_malloc() [2/2]

template<typename T, int Dims>
int Halide::Buffer< T, Dims >::device_malloc ( const DeviceAPI d,
const Target t = get_jit_target_from_environment(),
JITUserContext context = nullptr 
)
inline

Allocate storage on the GPU, using the given device API.

Definition at line 611 of file Buffer.h.

◆ device_wrap_native()

template<typename T, int Dims>
int Halide::Buffer< T, Dims >::device_wrap_native ( const DeviceAPI d,
uint64_t  handle,
const Target t = get_jit_target_from_environment(),
JITUserContext context = nullptr 
)
inline

Wrap a native handle, using the given device API.

It is a bad idea to pass DeviceAPI::Default_GPU to this routine as the handle argument must match the API that the default resolves to and it is clearer and more reliable to pass the resolved DeviceAPI explicitly.

Definition at line 620 of file Buffer.h.

Member Data Documentation

◆ AnyDims

template<typename T, int Dims>
constexpr int Halide::Buffer< T, Dims >::AnyDims = Halide::AnyDims
static

Definition at line 158 of file Buffer.h.

◆ has_static_halide_type

template<typename T, int Dims>
constexpr bool Halide::Buffer< T, Dims >::has_static_halide_type = Runtime::Buffer<T, Dims>::has_static_halide_type
static

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 512 of file Buffer.h.

◆ has_static_dimensions

template<typename T, int Dims>
constexpr bool Halide::Buffer< T, Dims >::has_static_dimensions = Runtime::Buffer<T, Dims>::has_static_dimensions
static

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 518 of file Buffer.h.


The documentation for this class was generated from the following files: