diff --git a/doc/runtime_memory.rst b/doc/runtime_memory.rst
index cfe41dc565e35d6bcab81de7d07de02b5262af06..f9c31a8bff21c056a8743b5c76aa4d4aca67de59 100644
--- a/doc/runtime_memory.rst
+++ b/doc/runtime_memory.rst
@@ -371,6 +371,8 @@ Transfers
 
 .. autofunction:: enqueue_copy(queue, dest, src, **kwargs)
 
+.. autofunction:: enqueue_fill(queue, dest, src, **kwargs)
+
 Mapping Memory into Host Address Space
 --------------------------------------
 
diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py
index ab042c0ff4307af732ffc269813d4465b6b553b7..94c35cc567a94575664ebc1993022ff50d74e9bb 100644
--- a/pyopencl/__init__.py
+++ b/pyopencl/__init__.py
@@ -1962,6 +1962,28 @@ def enqueue_copy(queue, dest, src, **kwargs):
 # }}}
 
 
+# {{{ enqueue_fill
+
+def enqueue_fill(queue: CommandQueue,
+        dest: "Union[MemoryObjectHolder, SVMPointer]",
+        pattern: Any, size: int, *, offset: int = 0,
+        wait_for: Optional[Sequence[Event]] = None) -> Event:
+    """
+    .. versionadded:: 2022.2
+    """
+    if isinstance(dest, MemoryObjectHolder):
+        return enqueue_fill_buffer(queue, dest, pattern, offset, size, wait_for)
+    elif isinstance(dest, SVMPointer):
+        if offset:
+            raise NotImplementedError("enqueue_fill with SVM does not yet support "
+                    "offsets")
+        return enqueue_svm_memfill(queue, dest, pattern, size, wait_for)
+    else:
+        raise TypeError(f"enqueue_fill does not know how to fill '{type(dest)}'")
+
+# }}}
+
+
 # {{{ image creation
 
 DTYPE_TO_CHANNEL_TYPE = {
diff --git a/pyopencl/array.py b/pyopencl/array.py
index 80b1c61d1396eac1639ee77071cdd0fea66a1d2b..a1bf58e9d8bac90318294fbb079dcc422c9a515b 100644
--- a/pyopencl/array.py
+++ b/pyopencl/array.py
@@ -1469,8 +1469,8 @@ class Array:
         # https://github.com/inducer/pyopencl/issues/395
         if cl_version_gtr_1_2 and not (on_nvidia and self.nbytes >= 2**31):
             self.add_event(
-                    cl.enqueue_fill_buffer(queue, self.base_data, np.int8(0),
-                        self.offset, self.nbytes, wait_for=wait_for))
+                    cl.enqueue_fill(queue, self.base_data, np.int8(0),
+                        self.nbytes, offset=self.offset, wait_for=wait_for))
         else:
             zero = np.zeros((), self.dtype)
             self.fill(zero, queue=queue)