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
orCL_MEM_WRITE_ONLY
values are not specified inflags
, they are inherited from the corresponding memory access qualifers associated withbuffer
. TheCL_MEM_USE_HOST_PTR
,CL_MEM_ALLOC_HOST_PTR
andCL_MEM_COPY_HOST_PTR
values cannot be specified inflags
but are inherited from the corresponding memory access qualifiers associated withbuffer
. IfCL_MEM_COPY_HOST_PTR
is specified in the memory access qualifier values associated withbuffer
it does not imply any additional copies when the sub-buffer is created frombuffer
. If theCL_MEM_HOST_WRITE_ONLY
,CL_MEM_HOST_READ_ONLY
orCL_MEM_HOST_NO_ACCESS
values are not specified inflags
, they are inherited from the corresponding memory access qualifiers associated withbuffer
. buffer_create_type
andbuffer_create_info
-
Describes the type of buffer object to be created. The list of supported values for
buffer_create_type
and corresponding descriptor thatbuffer_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
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 inbuffer
.If
buffer
is created withCL_MEM_USE_HOST_PTR
, thehost_ptr
associated with the buffer object returned ishost_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 inerrcode_ret
if the region specified by (origin, size
) is out of bounds inbuffer
.CL_INVALID_BUFFER_SIZE
ifsize
is 0.CL_MISALIGNED_SUB_BUFFER_OFFSET
is returned inerrcode_ret
if there are no devices in context associated withbuffer
for which theorigin
value is aligned to theCL_DEVICE_MEM_BASE_ADDR_ALIGN
value.
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
-
CL_INVALID_MEM_OBJECT
ifbuffer
is not a valid buffer object or is a sub-buffer object. -
CL_INVALID_VALUE
ifbuffer
was created withCL_MEM_WRITE_ONLY
andflags
specifiesCL_MEM_READ_WRITE
orCL_MEM_READ_ONLY
, or ifbuffer
was created withCL_MEM_READ_ONLY
andflags
specifiesCL_MEM_READ_WRITE
orCL_MEM_WRITE_ONLY
, or ifflags
specifiesCL_MEM_USE_HOST_PTR
orCL_MEM_ALLOC_HOST_PTR
orCL_MEM_COPY_HOST_PTR
. -
CL_INVALID_VALUE
ifbuffer
was created withCL_MEM_HOST_WRITE_ONLY
andflags
specifiesCL_MEM_HOST_READ_ONLY
or ifbuffer
was created withCL_MEM_HOST_READ_ONLY
andflags
specifiesCL_MEM_HOST_WRITE_ONLY
, or ifbuffer
was created withCL_MEM_HOST_NO_ACCESS
andflags
specifiesCL_MEM_HOST_READ_ONLY
orCL_MEM_HOST_WRITE_ONLY
. -
CL_INVALID_VALUE
if value specified inbuffer_create_type
is not valid. -
CL_INVALID_VALUE
if value(s) specified inbuffer_create_info
(for a givenbuffer_create_type
) is not valid or ifbuffer_create_info
is NULL. -
CL_INVALID_BUFFER_SIZE
if size is 0. -
CL_MEM_OBJECT_ALLOCATION_FAILURE
if there is a failure to allocate memory for sub-buffer object. -
CL_OUT_OF_RESOURCES
if there is a failure to allocate resources required by the OpenCL implementation on the device. -
CL_OUT_OF_HOST_MEMORY
if there is a failure to allocate resources required by the OpenCL implementation on the host.