! \brief Class interface for 3D Image Memory objects. * * See Memory for details about copy semantics, etc. * * \see Memory */
| 4197 | * \see Memory |
| 4198 | */ |
| 4199 | class Image3D : public Image |
| 4200 | { |
| 4201 | public: |
| 4202 | /*! \brief Constructs a 3D Image in a specified context. |
| 4203 | * |
| 4204 | * Wraps clCreateImage(). |
| 4205 | */ |
| 4206 | Image3D( |
| 4207 | const Context& context, |
| 4208 | cl_mem_flags flags, |
| 4209 | ImageFormat format, |
| 4210 | ::size_t width, |
| 4211 | ::size_t height, |
| 4212 | ::size_t depth, |
| 4213 | ::size_t row_pitch = 0, |
| 4214 | ::size_t slice_pitch = 0, |
| 4215 | void* host_ptr = NULL, |
| 4216 | cl_int* err = NULL) |
| 4217 | { |
| 4218 | cl_int error; |
| 4219 | bool useCreateImage; |
| 4220 | |
| 4221 | #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) |
| 4222 | // Run-time decision based on the actual platform |
| 4223 | { |
| 4224 | cl_uint version = detail::getContextPlatformVersion(context()); |
| 4225 | useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above |
| 4226 | } |
| 4227 | #elif defined(CL_VERSION_1_2) |
| 4228 | useCreateImage = true; |
| 4229 | #else |
| 4230 | useCreateImage = false; |
| 4231 | #endif |
| 4232 | |
| 4233 | #if defined(CL_VERSION_1_2) |
| 4234 | if (useCreateImage) |
| 4235 | { |
| 4236 | cl_image_desc desc = |
| 4237 | { |
| 4238 | CL_MEM_OBJECT_IMAGE3D, |
| 4239 | width, |
| 4240 | height, |
| 4241 | depth, |
| 4242 | 0, // array size (unused) |
| 4243 | row_pitch, |
| 4244 | slice_pitch, |
| 4245 | 0, 0, 0 |
| 4246 | }; |
| 4247 | object_ = ::clCreateImage( |
| 4248 | context(), |
| 4249 | flags, |
| 4250 | &format, |
| 4251 | &desc, |
| 4252 | host_ptr, |
| 4253 | &error); |
| 4254 | |
| 4255 | detail::errHandler(error, __CREATE_IMAGE_ERR); |
| 4256 | if (err != NULL) { |