Creates a new buffer out of this buffer. The new buffer is a sub region of this buffer. \p flags The mem_flags which should be used to create the new buffer \p origin The start index in this buffer \p size The size of the new sub buffer \see_opencl_ref{clCreateSubBuffer} \opencl_version_warning{1,1}
| 165 | /// |
| 166 | /// \opencl_version_warning{1,1} |
| 167 | buffer create_subbuffer(cl_mem_flags flags, size_t origin, |
| 168 | size_t size) |
| 169 | { |
| 170 | BOOST_ASSERT(origin + size <= this->size()); |
| 171 | BOOST_ASSERT(origin % (get_context(). |
| 172 | get_device(). |
| 173 | get_info<CL_DEVICE_MEM_BASE_ADDR_ALIGN>() / 8) == 0); |
| 174 | cl_int error = 0; |
| 175 | |
| 176 | cl_buffer_region region = { origin, size }; |
| 177 | |
| 178 | cl_mem mem = clCreateSubBuffer(m_mem, |
| 179 | flags, |
| 180 | CL_BUFFER_CREATE_TYPE_REGION, |
| 181 | ®ion, |
| 182 | &error); |
| 183 | |
| 184 | if(!mem){ |
| 185 | BOOST_THROW_EXCEPTION(opencl_error(error)); |
| 186 | } |
| 187 | |
| 188 | return buffer(mem, false); |
| 189 | } |
| 190 | #endif // CL_VERSION_1_1 |
| 191 | }; |
| 192 |