| 6605 | |
| 6606 | template< typename IteratorType > |
| 6607 | Buffer::Buffer( |
| 6608 | const Context &context, |
| 6609 | IteratorType startIterator, |
| 6610 | IteratorType endIterator, |
| 6611 | bool readOnly, |
| 6612 | bool useHostPtr, |
| 6613 | cl_int* err) |
| 6614 | { |
| 6615 | typedef typename std::iterator_traits<IteratorType>::value_type DataType; |
| 6616 | cl_int error; |
| 6617 | |
| 6618 | cl_mem_flags flags = 0; |
| 6619 | if( readOnly ) { |
| 6620 | flags |= CL_MEM_READ_ONLY; |
| 6621 | } |
| 6622 | else { |
| 6623 | flags |= CL_MEM_READ_WRITE; |
| 6624 | } |
| 6625 | if( useHostPtr ) { |
| 6626 | flags |= CL_MEM_USE_HOST_PTR; |
| 6627 | } |
| 6628 | |
| 6629 | ::size_t size = sizeof(DataType)*(endIterator - startIterator); |
| 6630 | |
| 6631 | if( useHostPtr ) { |
| 6632 | object_ = ::clCreateBuffer(context(), flags, size, static_cast<DataType*>(&*startIterator), &error); |
| 6633 | } else { |
| 6634 | object_ = ::clCreateBuffer(context(), flags, size, 0, &error); |
| 6635 | } |
| 6636 | |
| 6637 | detail::errHandler(error, __CREATE_BUFFER_ERR); |
| 6638 | if (err != NULL) { |
| 6639 | *err = error; |
| 6640 | } |
| 6641 | |
| 6642 | if( !useHostPtr ) { |
| 6643 | CommandQueue queue(context, 0, &error); |
| 6644 | detail::errHandler(error, __CREATE_BUFFER_ERR); |
| 6645 | if (err != NULL) { |
| 6646 | *err = error; |
| 6647 | } |
| 6648 | |
| 6649 | error = cl::copy(queue, startIterator, endIterator, *this); |
| 6650 | detail::errHandler(error, __CREATE_BUFFER_ERR); |
| 6651 | if (err != NULL) { |
| 6652 | *err = error; |
| 6653 | } |
| 6654 | } |
| 6655 | } |
| 6656 | |
| 6657 | template< typename IteratorType > |
| 6658 | Buffer::Buffer( |
no test coverage detected