diff --git a/src/c_wrapper/image.cpp b/src/c_wrapper/image.cpp index d2b9bc774ca3774a148930eed172807a2464392a..9c53e8c5f73237b8dc8a87a17e8404333405f083 100644 --- a/src/c_wrapper/image.cpp +++ b/src/c_wrapper/image.cpp @@ -190,7 +190,7 @@ enqueue_read_image(clobj_t *evt, clobj_t _queue, clobj_t _mem, auto queue = static_cast<command_queue*>(_queue); auto img = static_cast<image*>(_mem); ConstBuffer<size_t, 3> origin(_origin, origin_l); - ConstBuffer<size_t, 3> region(_region, region_l); + ConstBuffer<size_t, 3> region(_region, region_l, 1); return c_handle_error([&] { retry_mem_error([&] { pyopencl_call_guarded( @@ -215,7 +215,7 @@ enqueue_copy_image(clobj_t *evt, clobj_t _queue, clobj_t _src, clobj_t _dst, auto dst = static_cast<image*>(_dst); ConstBuffer<size_t, 3> src_origin(_src_origin, src_origin_l); ConstBuffer<size_t, 3> dst_origin(_dst_origin, dst_origin_l); - ConstBuffer<size_t, 3> region(_region, region_l); + ConstBuffer<size_t, 3> region(_region, region_l, 1); return c_handle_error([&] { retry_mem_error([&] { pyopencl_call_guarded( @@ -237,7 +237,7 @@ enqueue_write_image(clobj_t *evt, clobj_t _queue, clobj_t _mem, auto img = static_cast<image*>(_mem); const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); ConstBuffer<size_t, 3> origin(_origin, origin_l); - ConstBuffer<size_t, 3> region(_region, region_l); + ConstBuffer<size_t, 3> region(_region, region_l, 1); return c_handle_error([&] { retry_mem_error([&] { pyopencl_call_guarded( diff --git a/src/c_wrapper/memory_map.cpp b/src/c_wrapper/memory_map.cpp index 0963c8b7b6954ae93be0e8586d06e5f71046d7ef..c0332e9287de2b33f24628f4eb76b1ee1682a1b1 100644 --- a/src/c_wrapper/memory_map.cpp +++ b/src/c_wrapper/memory_map.cpp @@ -94,7 +94,7 @@ enqueue_map_image(clobj_t *evt, clobj_t *map, clobj_t _queue, clobj_t _mem, auto img = static_cast<image*>(_mem); const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); ConstBuffer<size_t, 3> origin(_origin, origin_l); - ConstBuffer<size_t, 3> region(_region, region_l); + ConstBuffer<size_t, 3> region(_region, region_l, 1); return c_handle_error([&] { void *res = retry_mem_error([&] { return pyopencl_call_guarded( diff --git a/src/c_wrapper/utils.h b/src/c_wrapper/utils.h index 813c42d750cc011fbffe45aa6c2506c36f4b4a7a..2ac9383b340f5935ed5d458d1b06d0e2538e421b 100644 --- a/src/c_wrapper/utils.h +++ b/src/c_wrapper/utils.h @@ -347,11 +347,16 @@ private: ConstBuffer(ConstBuffer<T, n, AT>&&) = delete; ConstBuffer() = delete; public: - ConstBuffer(const T *buf, size_t l) + ConstBuffer(const T *buf, size_t l, T content=0) : ArgBuffer<const T, AT>(buf, n) { if (l < n) { - memcpy(m_intern_buf, buf, sizeof(T) * std::min(l, n)); + memcpy(m_intern_buf, buf, sizeof(T) * l); + if (content) { + for (size_t i = l;i < n;i++) { + m_intern_buf[i] = content; + } + } this->set(m_intern_buf); } }