]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | //---------------------------------------------------------------------------// |
2 | // Copyright (c) 2013-2015 Kyle Lutz <kyle.r.lutz@gmail.com> | |
3 | // | |
4 | // Distributed under the Boost Software License, Version 1.0 | |
5 | // See accompanying file LICENSE_1_0.txt or copy at | |
6 | // http://www.boost.org/LICENSE_1_0.txt | |
7 | // | |
8 | // See http://boostorg.github.com/compute for more information. | |
9 | //---------------------------------------------------------------------------// | |
10 | ||
11 | #ifndef BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP | |
12 | #define BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP | |
13 | ||
14 | #include <boost/compute/cl.hpp> | |
15 | ||
16 | namespace boost { | |
17 | namespace compute { | |
18 | ||
19 | /// \class image_format | |
20 | /// \brief A OpenCL image format | |
21 | /// | |
22 | /// For example, to create a format for a 8-bit RGBA image: | |
23 | /// \code | |
24 | /// boost::compute::image_format rgba8(CL_RGBA, CL_UNSIGNED_INT8); | |
25 | /// \endcode | |
26 | /// | |
27 | /// After being constructed, image_format objects are usually passed to the | |
28 | /// constructor of the various image classes (e.g. \ref image2d, \ref image3d) | |
29 | /// to create an image object on a compute device. | |
30 | /// | |
31 | /// Image formats supported by a context can be queried with the static | |
32 | /// get_supported_formats() in each image class. For example: | |
33 | /// \code | |
34 | /// std::vector<image_format> formats = image2d::get_supported_formats(ctx); | |
35 | /// \endcode | |
36 | /// | |
37 | /// \see image2d | |
38 | class image_format | |
39 | { | |
40 | public: | |
41 | enum channel_order { | |
42 | r = CL_R, | |
43 | a = CL_A, | |
44 | intensity = CL_INTENSITY, | |
45 | luminance = CL_LUMINANCE, | |
46 | rg = CL_RG, | |
47 | ra = CL_RA, | |
48 | rgb = CL_RGB, | |
49 | rgba = CL_RGBA, | |
50 | argb = CL_ARGB, | |
51 | bgra = CL_BGRA | |
52 | }; | |
53 | ||
54 | enum channel_data_type { | |
55 | snorm_int8 = CL_SNORM_INT8, | |
56 | snorm_int16 = CL_SNORM_INT16, | |
57 | unorm_int8 = CL_UNORM_INT8, | |
58 | unorm_int16 = CL_UNORM_INT16, | |
59 | unorm_short_565 = CL_UNORM_SHORT_565, | |
60 | unorm_short_555 = CL_UNORM_SHORT_555, | |
61 | unorm_int_101010 = CL_UNORM_INT_101010, | |
62 | signed_int8 = CL_SIGNED_INT8, | |
63 | signed_int16 = CL_SIGNED_INT16, | |
64 | signed_int32 = CL_SIGNED_INT32, | |
65 | unsigned_int8 = CL_UNSIGNED_INT8, | |
66 | unsigned_int16 = CL_UNSIGNED_INT16, | |
67 | unsigned_int32 = CL_UNSIGNED_INT32, | |
68 | float16 = CL_HALF_FLOAT, | |
69 | float32 = CL_FLOAT | |
70 | }; | |
71 | ||
72 | /// Creates a new image format object with \p order and \p type. | |
73 | explicit image_format(cl_channel_order order, cl_channel_type type) | |
74 | { | |
75 | m_format.image_channel_order = order; | |
76 | m_format.image_channel_data_type = type; | |
77 | } | |
78 | ||
79 | /// Creates a new image format object from \p format. | |
80 | explicit image_format(const cl_image_format &format) | |
81 | { | |
82 | m_format.image_channel_order = format.image_channel_order; | |
83 | m_format.image_channel_data_type = format.image_channel_data_type; | |
84 | } | |
85 | ||
86 | /// Creates a new image format object as a copy of \p other. | |
87 | image_format(const image_format &other) | |
88 | : m_format(other.m_format) | |
89 | { | |
90 | } | |
91 | ||
92 | /// Copies the format from \p other to \c *this. | |
93 | image_format& operator=(const image_format &other) | |
94 | { | |
95 | if(this != &other){ | |
96 | m_format = other.m_format; | |
97 | } | |
98 | ||
99 | return *this; | |
100 | } | |
101 | ||
102 | /// Destroys the image format object. | |
103 | ~image_format() | |
104 | { | |
105 | } | |
106 | ||
107 | /// Returns a pointer to the \c cl_image_format object. | |
108 | const cl_image_format* get_format_ptr() const | |
109 | { | |
110 | return &m_format; | |
111 | } | |
112 | ||
113 | /// Returns \c true if \c *this is the same as \p other. | |
114 | bool operator==(const image_format &other) const | |
115 | { | |
116 | return m_format.image_channel_order == | |
117 | other.m_format.image_channel_order && | |
118 | m_format.image_channel_data_type == | |
119 | other.m_format.image_channel_data_type; | |
120 | } | |
121 | ||
122 | /// Returns \c true if \c *this is not the same as \p other. | |
123 | bool operator!=(const image_format &other) const | |
124 | { | |
125 | return !(*this == other); | |
126 | } | |
127 | ||
128 | private: | |
129 | cl_image_format m_format; | |
130 | }; | |
131 | ||
132 | } // end compute namespace | |
133 | } // end boost namespace | |
134 | ||
135 | #endif // BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP |