123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- //---------------------------------------------------------------------------//
- // Copyright (c) 2013-2015 Kyle Lutz <[email protected]>
- //
- // 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
|