Creates a new buffer object (referred to as a sub-buffer object) from an existing buffer object.
cl_mem clCreateSubBuffer
(
| cl_mem buffer, |
cl_mem_flags flags, | |
cl_buffer_create_type buffer_create_type, | |
const void *buffer_create_info, | |
cl_int *errcode_ret) |
buffer
A valid buffer object and cannot be a sub-buffer object.
flags
A bit-field that is used to specify allocation and
usage information about the sub-buffer memory object
being created and is described in the table below. If the
CL_MEM_READ_WRITE
, CL_MEM_READ_ONLY
or CL_MEM_WRITE_ONLY
values are not
specified in flags
, they are inherited
from the corresponding memory access qualifers associated with
buffer
. The CL_MEM_USE_HOST_PTR
,
CL_MEM_ALLOC_HOST_PTR
and
CL_MEM_COPY_HOST_PTR
values cannot
be specified in flags
but are inherited
from the corresponding memory access qualifiers associated with
buffer
. If CL_MEM_COPY_HOST_PTR
is specified in the memory access qualifier values associated with
buffer
it does not imply any additional copies
when the sub-buffer is created from buffer
.
If the CL_MEM_HOST_WRITE_ONLY
,
CL_MEM_HOST_READ_ONLY
or
CL_MEM_HOST_NO_ACCESS
values are not specified in
flags
, they are inherited from the corresponding memory
access qualifiers associated with buffer
.
cl_mem_flags | Description |
---|---|
CL_MEM_READ_WRITE
|
This flag specifies that the memory object will be read and written by a kernel. This is the default. |
CL_MEM_WRITE_ONLY
|
This flag specifies that the memory object will be written but not read by a kernel.
Reading from a buffer or image object created with
|
CL_MEM_READ_ONLY
|
This flag specifies that the memory object is a read-only memory object when used inside a kernel.
Writing to a buffer or image object created with
|
CL_MEM_USE_HOST_PTR
|
This flag is valid only if
OpenCL implementations are allowed to cache the buffer contents pointed to by
The result of OpenCL commands that operate on multiple buffer objects created with
the same
Refer to the description
of the alignment rules for
|
CL_MEM_ALLOC_HOST_PTR
|
This flag specifies that the application wants the OpenCL implementation to allocate memory from host accessible memory.
|
CL_MEM_COPY_HOST_PTR
|
This flag is valid only if
|
CL_MEM_HOST_WRITE_ONLY
|
This flag specifies that the host will only write to the memory object (using OpenCL APIs that enqueue a write or a map for write). This can be used to optimize write access from the host (e.g. enable write-combined allocations for memory objects for devices that communicate with the host over a system bus such as PCIe). |
CL_MEM_HOST_READ_ONLY
|
This flag specifies that the host will only read the memory object (using OpenCL APIs that enqueue a read or a map for read).
|
CL_MEM_HOST_NO_ACCESS
|
This flag specifies that the host will not read or write the memory object.
|
buffer_create_type
and buffer_create_info
Describes the type of buffer object to be created. The list of supported values
for buffer_create_type
and corresponding descriptor that
buffer_create_info
points to is described below.
cl_buffer_create_type | Description |
---|---|
CL_BUFFER_CREATE_TYPE_REGION
|
Create a buffer object that represents a specific region in
(
If
The buffer object returned references the data store allocated for
|
Concurrent reading from, writing to and copying between both a buffer object and its sub-buffer object(s) is undefined. Concurrent reading from, writing to and copying between overlapping sub-buffer objects created with the same buffer object is undefined. Only reading from both a buffer object and its sub-buffer objects or reading from multiple overlapping sub-buffer objects is defined.
Returns CL_SUCCESS if the function is executed
successfully. Otherwise, it
returns one of the following errors in errcode_ret
buffer
is not
a valid buffer object or is a sub-buffer object.
buffer
was created
with CL_MEM_WRITE_ONLY
and flags
specifies
CL_MEM_READ_WRITE
or CL_MEM_READ_ONLY
, or
if buffer
was created with CL_MEM_READ_ONLY
and flags
specifies CL_MEM_READ_WRITE
or CL_MEM_WRITE_ONLY
, or if flags
specifies CL_MEM_USE_HOST_PTR
or CL_MEM_ALLOC_HOST_PTR
or
CL_MEM_COPY_HOST_PTR
.
buffer
was created with
CL_MEM_HOST_WRITE_ONLY
and flags
specifies
CL_MEM_HOST_READ_ONLY
or if buffer
was created with CL_MEM_HOST_READ_ONLY
and
flags
specifies CL_MEM_HOST_WRITE_ONLY
, or if
buffer
was created with CL_MEM_HOST_NO_ACCESS
and flags
specifies CL_MEM_HOST_READ_ONLY
or CL_MEM_HOST_WRITE_ONLY
.
buffer_create_type
is not valid.
buffer_create_info
(for a given
buffer_create_type
) is not valid or if
buffer_create_info
is NULL.