Creates a 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 object. Cannot be a sub-buffer object.
flags
A bit-field that is used to specify allocation and usage information about the image memory
object being created. The
following table describes the possible values for flags
:
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 flags 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 |
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
|
buffer_create_type
and buffer_create_info
The type of buffer object to be created. The supported value for buffer_create_type
is CL_BUFFER_CREATE_TYPE_REGION, which create a buffer object that represents a specific region in buffer
. buffer_create_info
is a pointer to the following structure:
typedef struct _cl_buffer_region {
size_t origin;
size_t size;
} cl_buffer_region;
(origin, size
) defines the offset and size in bytes in buffer
.
If buffer
is created with CL_MEM_USE_HOST_PTR, the host_ptr
associated with the buffer object returned is host_ptr
+ origin
.
The buffer object returned references the data store allocated for buffer
and points to a specific region given by (origin, size
) in this data store.
CL_INVALID_VALUE is returned in errcode_ret
if the region specified by (origin, size
) is out of bounds in buffer
.
CL_MISALIGNED_SUB_BUFFER_OFFSET is returned in errcode_ret
if there are no devices in context associated with buffer
for which the origin
value is aligned to the CL_DEVICE_MEM_BASE_ADDR_ALIGN value.
errcode_ret
Returns an appropriate error code. If errcode_ret
is NULL, no error code is returned.
The implementation may return the same cl_mem object with the reference count incremented
appropriately for multiple calls to clCreateSubBuffer
that use the same values for buffer
, flags
, buffer_create_type
and buffer_create_info
points to the same descriptor or descriptors that
describe values that are exactly the same.
The result of OpenCL commands that read from and write to multiple sub-buffer objects created
using clCreateSubBuffer
with the same buffer object but represent overlapping regions in the
buffer object is undefined. The result of OpenCL commands that read from and write to a buffer
object and its sub-buffer object(s) created using clCreateSubBuffer
with the same buffer object
is undefined. OpenCL commands that only read from multiple sub-buffer objects created using
clCreateSubBuffer
with the same buffer object but represent overlapping regions in the buffer
object or read from a buffer object and its sub-buffer objects should work as defined.
Returns a valid non-zero buffer object and errcode_ret
is set to CL_SUCCESS if
the buffer object is created successfully. Otherwise, it returns one of the following error in errcode_ret
:
buffer
is not a valid buffer object or is a sub-buffer object.
flags
are not valid; or if value specified in buffer_create_type
is not valid; or if value(s) specified in buffer_create_info
(for a given buffer_create_type
) is not valid or if buffer_create_info
is NULL.