]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/compute/include/boost/compute/image/image_format.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / compute / include / boost / compute / image / image_format.hpp
CommitLineData
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
16namespace boost {
17namespace 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
38class image_format
39{
40public:
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
128private:
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