Halide 22.0.0 Halide compiler and libraries

Namespaces | Functions
Halide::BoundaryConditions Namespace Reference

namespace to hold functions for imposing boundary conditions on Halide Funcs. More...

## Namespaces
namespace | Internal

## Functions
Func | constant_exterior (const Func &source, const Tuple &value, const Region &bounds)
| Impose a boundary condition such that a given expression is returned everywhere outside the boundary. More...
Func | constant_exterior (const Func &source, const Expr &value, const Region &bounds)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | constant_exterior (const T &func_like, const Tuple &value, const Region &bounds)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | constant_exterior (const T &func_like, const Expr &value, const Region &bounds)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | constant_exterior (const T &func_like, const Tuple &value)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | constant_exterior (const T &func_like, const Expr &value)
template<typename T , typename... Bounds, std::enable_if_t< Halide::Internal::all_are_convertible< Expr, Bounds... >::value > * = nullptr>
HALIDE_NO_USER_CODE_INLINE Func | constant_exterior (const T &func_like, const Tuple &value, Bounds &&...bounds)
template<typename T , typename... Bounds, std::enable_if_t< Halide::Internal::all_are_convertible< Expr, Bounds... >::value > * = nullptr>
HALIDE_NO_USER_CODE_INLINE Func | constant_exterior (const T &func_like, const Expr &value, Bounds &&...bounds)
Func | repeat_edge (const Func &source, const Region &bounds)
| Impose a boundary condition such that the nearest edge sample is returned everywhere outside the given region. More...
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | repeat_edge (const T &func_like, const Region &bounds)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | repeat_edge (const T &func_like)
Func | repeat_image (const Func &source, const Region &bounds)
| Impose a boundary condition such that the entire coordinate space is tiled with copies of the image abutted against each other. More...
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | repeat_image (const T &func_like, const Region &bounds)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | repeat_image (const T &func_like)
Func | mirror_image (const Func &source, const Region &bounds)
| Impose a boundary condition such that the entire coordinate space is tiled with copies of the image abutted against each other, but mirror them such that adjacent edges are the same. More...
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | mirror_image (const T &func_like, const Region &bounds)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | mirror_image (const T &func_like)
Func | mirror_interior (const Func &source, const Region &bounds)
| Impose a boundary condition such that the entire coordinate space is tiled with copies of the image abutted against each other, but mirror them such that adjacent edges are the same and then overlap the edges. More...
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | mirror_interior (const T &func_like, const Region &bounds)
template<typename T >
HALIDE_NO_USER_CODE_INLINE Func | mirror_interior (const T &func_like)

## Detailed Description

namespace to hold functions for imposing boundary conditions on Halide Funcs.

All functions in this namespace transform a source Func to a result Func where the result produces the values of the source within a given region and a different set of values outside the given region. A region is an N dimensional box specified by mins and extents.

Three areas are defined: The image is the entire set of values in the region. The edge is the set of pixels in the image but adjacent to coordinates that are not The interior is the image minus the edge (and is undefined if the extent of any region is 1 or less).

If the source Func has more dimensions than are specified, the extra ones are unmodified. Additionally, passing an undefined (default constructed) 'Expr' for the min and extent of a dimension will keep that dimension unmodified.

Numerous options for specifing the outside area are provided, including replacement with an expression, repeating the edge samples, mirroring over the edge, and repeating or mirroring the entire image.

Using these functions to express your boundary conditions is highly recommended for correctness and performance. Some of these are hard to get right. The versions here are both understood by bounds inference, and also judiciously use the 'likely' intrinsic to minimize runtime overhead.

## Function Documentation

## ◆ constant_exterior() [1/8]

Func Halide::BoundaryConditions::constant_exterior | ( | const Func & | source,
|  | const Tuple & | value,
|  | const Region & | bounds
| ) |  |

Impose a boundary condition such that a given expression is returned everywhere outside the boundary.

Generally the expression will be a constant, though the code currently allows accessing the arguments of source.

An ImageParam, Buffer<T>, or similar can be passed instead of a Func. If this is done and no bounds are given, the boundaries will be taken from the min and extent methods of the passed object. Note that objects are taken by mutable ref. Pipelines capture Buffers via mutable refs, because running a pipeline might alter the Buffer metadata (e.g. device allocation state).

(This is similar to setting GL_TEXTURE_WRAP_* to GL_CLAMP_TO_BORDER and putting value in the border of the texture.)

You may pass undefined Exprs for dimensions that you do not wish to bound.

Referenced by constant_exterior().

## ◆ constant_exterior() [2/8]

Func Halide::BoundaryConditions::constant_exterior | ( | const Func & | source,
|  | const Expr & | value,
|  | const Region & | bounds
| ) |  |

## ◆ constant_exterior() [3/8]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::constant_exterior | ( | const T & | func_like,
|  | const Tuple & | value,
|  | const Region & | bounds
| ) |  |

Definition at line 101 of file BoundaryConditions.h.

References constant_exterior(), and Halide::BoundaryConditions::Internal::func_like_to_func().

## ◆ constant_exterior() [4/8]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::constant_exterior | ( | const T & | func_like,
|  | const Expr & | value,
|  | const Region & | bounds
| ) |  |

Definition at line 106 of file BoundaryConditions.h.

References constant_exterior(), and Halide::BoundaryConditions::Internal::func_like_to_func().

## ◆ constant_exterior() [5/8]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::constant_exterior | ( | const T & | func_like,
|  | const Tuple & | value
| ) |  |

Definition at line 111 of file BoundaryConditions.h.

References constant_exterior(), and Halide::BoundaryConditions::Internal::func_like_to_func().

## ◆ constant_exterior() [6/8]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::constant_exterior | ( | const T & | func_like,
|  | const Expr & | value
| ) |  |

Definition at line 120 of file BoundaryConditions.h.

References constant_exterior().

## ◆ constant_exterior() [7/8]

template<typename T , typename... Bounds, std::enable_if_t< Halide::Internal::all_are_convertible< Expr, Bounds... >::value > * = nullptr>

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::constant_exterior | ( | const T & | func_like,
|  | const Tuple & | value,
|  | Bounds &&... | bounds
| ) |  |

Definition at line 126 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::collect_region(), constant_exterior(), and Halide::BoundaryConditions::Internal::func_like_to_func().

## ◆ constant_exterior() [8/8]

template<typename T , typename... Bounds, std::enable_if_t< Halide::Internal::all_are_convertible< Expr, Bounds... >::value > * = nullptr>

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::constant_exterior | ( | const T & | func_like,
|  | const Expr & | value,
|  | Bounds &&... | bounds
| ) |  |

Definition at line 134 of file BoundaryConditions.h.

References constant_exterior().

## ◆ repeat_edge() [1/3]

Func Halide::BoundaryConditions::repeat_edge | ( | const Func & | source,
|  | const Region & | bounds
| ) |  |

Impose a boundary condition such that the nearest edge sample is returned everywhere outside the given region.

An ImageParam, Buffer<T>, or similar can be passed instead of a Func. If this is done and no bounds are given, the boundaries will be taken from the min and extent methods of the passed object.

(This is similar to setting GL_TEXTURE_WRAP_* to GL_CLAMP_TO_EDGE.)

You may pass undefined Exprs for dimensions that you do not wish to bound.

Examples
  tutorial/lesson_09_update_definitions.cpp.

Referenced by repeat_edge().

## ◆ repeat_edge() [2/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::repeat_edge | ( | const T & | func_like,
|  | const Region & | bounds
| ) |  |

Definition at line 156 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and repeat_edge().

## ◆ repeat_edge() [3/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::repeat_edge | ( | const T & | func_like | ) |

Definition at line 161 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and repeat_edge().

## ◆ repeat_image() [1/3]

Func Halide::BoundaryConditions::repeat_image | ( | const Func & | source,
|  | const Region & | bounds
| ) |  |

Impose a boundary condition such that the entire coordinate space is tiled with copies of the image abutted against each other.

An ImageParam, Buffer<T>, or similar can be passed instead of a Func. If this is done and no bounds are given, the boundaries will be taken from the min and extent methods of the passed object.

(This is similar to setting GL_TEXTURE_WRAP_* to GL_REPEAT.)

You may pass undefined Exprs for dimensions that you do not wish to bound.

Referenced by repeat_image().

## ◆ repeat_image() [2/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::repeat_image | ( | const T & | func_like,
|  | const Region & | bounds
| ) |  |

Definition at line 187 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and repeat_image().

## ◆ repeat_image() [3/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::repeat_image | ( | const T & | func_like | ) |

Definition at line 192 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and repeat_image().

## ◆ mirror_image() [1/3]

Func Halide::BoundaryConditions::mirror_image | ( | const Func & | source,
|  | const Region & | bounds
| ) |  |

Impose a boundary condition such that the entire coordinate space is tiled with copies of the image abutted against each other, but mirror them such that adjacent edges are the same.

An ImageParam, Buffer<T>, or similar can be passed instead of a Func. If this is done and no bounds are given, the boundaries will be taken from the min and extent methods of the passed object.

(This is similar to setting GL_TEXTURE_WRAP_* to GL_MIRRORED_REPEAT.)

You may pass undefined Exprs for dimensions that you do not wish to bound.

Referenced by mirror_image().

## ◆ mirror_image() [2/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::mirror_image | ( | const T & | func_like,
|  | const Region & | bounds
| ) |  |

Definition at line 218 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and mirror_image().

## ◆ mirror_image() [3/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::mirror_image | ( | const T & | func_like | ) |

Definition at line 223 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and mirror_image().

## ◆ mirror_interior() [1/3]

Func Halide::BoundaryConditions::mirror_interior | ( | const Func & | source,
|  | const Region & | bounds
| ) |  |

Impose a boundary condition such that the entire coordinate space is tiled with copies of the image abutted against each other, but mirror them such that adjacent edges are the same and then overlap the edges.

This produces an error if any extent is 1 or less. (TODO: check this.)

An ImageParam, Buffer<T>, or similar can be passed instead of a Func. If this is done and no bounds are given, the boundaries will be taken from the min and extent methods of the passed object.

(I do not believe there is a direct GL_TEXTURE_WRAP_* equivalent for this.)

You may pass undefined Exprs for dimensions that you do not wish to bound.

Referenced by mirror_interior().

## ◆ mirror_interior() [2/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::mirror_interior | ( | const T & | func_like,
|  | const Region & | bounds
| ) |  |

Definition at line 253 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and mirror_interior().

## ◆ mirror_interior() [3/3]

template<typename T >

HALIDE_NO_USER_CODE_INLINE Func Halide::BoundaryConditions::mirror_interior | ( | const T & | func_like | ) |

Definition at line 258 of file BoundaryConditions.h.

References Halide::BoundaryConditions::Internal::func_like_to_func(), and mirror_interior().