diff options
Diffstat (limited to 'boost/compute/image/image_format.hpp')
-rw-r--r-- | boost/compute/image/image_format.hpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/boost/compute/image/image_format.hpp b/boost/compute/image/image_format.hpp new file mode 100644 index 0000000000..a6ecf83ef6 --- /dev/null +++ b/boost/compute/image/image_format.hpp @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2013-2015 Kyle Lutz <kyle.r.lutz@gmail.com> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +// See http://boostorg.github.com/compute for more information. +//---------------------------------------------------------------------------// + +#ifndef BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP +#define BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP + +#include <boost/compute/cl.hpp> + +namespace boost { +namespace compute { + +/// \class image_format +/// \brief A OpenCL image format +/// +/// For example, to create a format for a 8-bit RGBA image: +/// \code +/// boost::compute::image_format rgba8(CL_RGBA, CL_UNSIGNED_INT8); +/// \endcode +/// +/// After being constructed, image_format objects are usually passed to the +/// constructor of the various image classes (e.g. \ref image2d, \ref image3d) +/// to create an image object on a compute device. +/// +/// Image formats supported by a context can be queried with the static +/// get_supported_formats() in each image class. For example: +/// \code +/// std::vector<image_format> formats = image2d::get_supported_formats(ctx); +/// \endcode +/// +/// \see image2d +class image_format +{ +public: + enum channel_order { + r = CL_R, + a = CL_A, + intensity = CL_INTENSITY, + luminance = CL_LUMINANCE, + rg = CL_RG, + ra = CL_RA, + rgb = CL_RGB, + rgba = CL_RGBA, + argb = CL_ARGB, + bgra = CL_BGRA + }; + + enum channel_data_type { + snorm_int8 = CL_SNORM_INT8, + snorm_int16 = CL_SNORM_INT16, + unorm_int8 = CL_UNORM_INT8, + unorm_int16 = CL_UNORM_INT16, + unorm_short_565 = CL_UNORM_SHORT_565, + unorm_short_555 = CL_UNORM_SHORT_555, + unorm_int_101010 = CL_UNORM_INT_101010, + signed_int8 = CL_SIGNED_INT8, + signed_int16 = CL_SIGNED_INT16, + signed_int32 = CL_SIGNED_INT32, + unsigned_int8 = CL_UNSIGNED_INT8, + unsigned_int16 = CL_UNSIGNED_INT16, + unsigned_int32 = CL_UNSIGNED_INT32, + float16 = CL_HALF_FLOAT, + float32 = CL_FLOAT + }; + + /// Creates a new image format object with \p order and \p type. + explicit image_format(cl_channel_order order, cl_channel_type type) + { + m_format.image_channel_order = order; + m_format.image_channel_data_type = type; + } + + /// Creates a new image format object from \p format. + explicit image_format(const cl_image_format &format) + { + m_format.image_channel_order = format.image_channel_order; + m_format.image_channel_data_type = format.image_channel_data_type; + } + + /// Creates a new image format object as a copy of \p other. + image_format(const image_format &other) + : m_format(other.m_format) + { + } + + /// Copies the format from \p other to \c *this. + image_format& operator=(const image_format &other) + { + if(this != &other){ + m_format = other.m_format; + } + + return *this; + } + + /// Destroys the image format object. + ~image_format() + { + } + + /// Returns a pointer to the \c cl_image_format object. + const cl_image_format* get_format_ptr() const + { + return &m_format; + } + + /// Returns \c true if \c *this is the same as \p other. + bool operator==(const image_format &other) const + { + return m_format.image_channel_order == + other.m_format.image_channel_order && + m_format.image_channel_data_type == + other.m_format.image_channel_data_type; + } + + /// Returns \c true if \c *this is not the same as \p other. + bool operator!=(const image_format &other) const + { + return !(*this == other); + } + +private: + cl_image_format m_format; +}; + +} // end compute namespace +} // end boost namespace + +#endif // BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP |