25template<
typename T,
int Dimensions,
bool Array = false,
bool Atomic = false>
struct ImageBase {
34 template<typename T, \
35 typename IntCoord = typename T::int_coord_type, \
36 typename DataVec = typename T::data_vec_type, \
37 typename SizeVec = typename T::size_vec_type>
47#define imageLoadFast imageLoad
48#define imageStoreFast imageStore
ImageBase< uint, 2, true, true > uimage2DArrayAtomic
ImageBase< int, 3, false, true > iimage3DAtomic
ImageBase< int, 2 > iimage2D
ImageBase< uint, 2 > uimage2D
ImageBase< int, 2, true, true > iimage2DArrayAtomic
ImageBase< int, 1, true > iimage1DArray
IMG_TEMPLATE uint imageAtomicXor(T &, IntCoord, uint) RET
IMG_TEMPLATE DataVec imageLoad(const T &, IntCoord) RET
IMG_TEMPLATE uint imageAtomicMax(T &, IntCoord, uint) RET
ImageBase< uint, 2, false, true > uimage2DAtomic
IMG_TEMPLATE uint imageAtomicAdd(T &, IntCoord, uint) RET
ImageBase< float, 1, true > image1DArray
ImageBase< uint, 3, false, true > uimage3DAtomic
IMG_TEMPLATE uint imageAtomicAnd(T &, IntCoord, uint) RET
ImageBase< uint, 2, true > uimage2DArray
ImageBase< float, 2, true > image2DArray
ImageBase< int, 1 > iimage1D
ImageBase< float, 2 > image2D
ImageBase< int, 2, true > iimage2DArray
IMG_TEMPLATE void imageFence(T &)
ImageBase< float, 3 > image3D
ImageBase< float, 1 > image1D
IMG_TEMPLATE SizeVec imageSize(const T &) RET
IMG_TEMPLATE uint imageAtomicCompSwap(T &, IntCoord, uint, uint) RET
IMG_TEMPLATE uint imageAtomicMin(T &, IntCoord, uint) RET
ImageBase< uint, 3 > uimage3D
ImageBase< int, 3 > iimage3D
IMG_TEMPLATE uint imageAtomicExchange(T &, IntCoord, uint) RET
ImageBase< int, 2, false, true > iimage2DAtomic
IMG_TEMPLATE uint imageAtomicOr(T &, IntCoord, uint) RET
ImageBase< uint, 1, true > uimage1DArray
ImageBase< uint, 1 > uimage1D
IMG_TEMPLATE void imageStore(T &, IntCoord, DataVec)
VecBase< int, coord_dim > int_coord_type
VecBase< T, 4 > data_vec_type
VecBase< int, coord_dim > size_vec_type
static constexpr int coord_dim