From 141fece43f29cec3b846155769aa5bbb802961e2 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 27 Apr 2011 09:29:49 -0400 Subject: [PATCH] Fix image <-> host copies in enqueue_copy(). --- doc/source/runtime.rst | 6 ++++-- pyopencl/__init__.py | 12 +++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/source/runtime.rst b/doc/source/runtime.rst index 3b714df3..cea471d0 100644 --- a/doc/source/runtime.rst +++ b/doc/source/runtime.rst @@ -489,10 +489,10 @@ Images .. function:: enqueue_read_image(queue, mem, origin, region, hostbuf, row_pitch=0, slice_pitch=0, wait_for=None, is_blocking=True) - |std-enqueue-blurb| - |copy-depr| + |std-enqueue-blurb| + .. versionchanged:: 0.91 *pitch* arguments defaults to zero, moved. @@ -502,6 +502,8 @@ Images .. function:: enqueue_write_image(queue, mem, origin, region, hostbuf, row_pitch=0, slice_pitch=0, wait_for=None, is_blocking=True) + |copy-depr| + |std-enqueue-blurb| .. versionchanged:: 0.91 diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index 8e508bcb..6ab8d83f 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -533,6 +533,13 @@ def enqueue_copy(queue, dest, src, **kwargs): # assume from-host origin = kwargs.pop("origin") region = kwargs.pop("region") + + pitches = kwargs.pop("pitches", (0,0)) + if len(pitches) == 1: + kwargs["row_pitch"], = pitches + else: + kwargs["row_pitch"], kwargs["slice_pitch"] = pitches + return _cl._enqueue_write_image(queue, dest, origin, region, src, **kwargs) else: @@ -544,13 +551,16 @@ def enqueue_copy(queue, dest, src, **kwargs): else: return _cl._enqueue_read_buffer(queue, src, dest, **kwargs) elif isinstance(src, Image): + origin = kwargs.pop("origin") + region = kwargs.pop("region") + pitches = kwargs.pop("pitches", (0,0)) if len(pitches) == 1: kwargs["row_pitch"], = pitches else: kwargs["row_pitch"], kwargs["slice_pitch"] = pitches - return _cl._enqueue_read_image(queue, src, dest, **kwargs) + return _cl._enqueue_read_image(queue, src, origin, region, dest, **kwargs) else: # assume from-host raise TypeError("enqueue_copy cannot perform host-to-host transfers") -- GitLab