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_ONLYorCL_MEM_WRITE_ONLYvalues are not specified inflags, they are inherited from the corresponding memory access qualifers associated withbuffer. TheCL_MEM_USE_HOST_PTR,CL_MEM_ALLOC_HOST_PTRandCL_MEM_COPY_HOST_PTRvalues cannot be specified inflagsbut are inherited from the corresponding memory access qualifiers associated withbuffer. IfCL_MEM_COPY_HOST_PTRis specified in the memory access qualifier values associated withbufferit does not imply any additional copies when the sub-buffer is created frombuffer. If theCL_MEM_HOST_WRITE_ONLY,CL_MEM_HOST_READ_ONLYorCL_MEM_HOST_NO_ACCESSvalues are not specified inflags, they are inherited from the corresponding memory access qualifiers associated withbuffer. buffer_create_typeandbuffer_create_info-
Describes the type of buffer object to be created. The list of supported values for
buffer_create_typeand corresponding descriptor thatbuffer_create_infopoints to is described below.cl_buffer_create_type Description CL_BUFFER_CREATE_TYPE_REGIONCreate a buffer object that represents a specific region in
buffer.buffer_create_infois 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
bufferis created withCL_MEM_USE_HOST_PTR, thehost_ptrassociated with the buffer object returned ishost_ptr+origin.The buffer object returned references the data store allocated for
bufferand points to a specific region given by (origin, size) in this data store.CL_INVALID_VALUEis returned inerrcode_retif the region specified by (origin, size) is out of bounds inbuffer.CL_INVALID_BUFFER_SIZEifsizeis 0.CL_MISALIGNED_SUB_BUFFER_OFFSETis returned inerrcode_retif there are no devices in context associated withbufferfor which theoriginvalue is aligned to theCL_DEVICE_MEM_BASE_ADDR_ALIGNvalue.
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_OBJECTifbufferis not a valid buffer object or is a sub-buffer object. -
CL_INVALID_VALUEifbufferwas created withCL_MEM_WRITE_ONLYandflagsspecifiesCL_MEM_READ_WRITEorCL_MEM_READ_ONLY, or ifbufferwas created withCL_MEM_READ_ONLYandflagsspecifiesCL_MEM_READ_WRITEorCL_MEM_WRITE_ONLY, or ifflagsspecifiesCL_MEM_USE_HOST_PTRorCL_MEM_ALLOC_HOST_PTRorCL_MEM_COPY_HOST_PTR. -
CL_INVALID_VALUEifbufferwas created withCL_MEM_HOST_WRITE_ONLYandflagsspecifiesCL_MEM_HOST_READ_ONLYor ifbufferwas created withCL_MEM_HOST_READ_ONLYandflagsspecifiesCL_MEM_HOST_WRITE_ONLY, or ifbufferwas created withCL_MEM_HOST_NO_ACCESSandflagsspecifiesCL_MEM_HOST_READ_ONLYorCL_MEM_HOST_WRITE_ONLY. -
CL_INVALID_VALUEif value specified inbuffer_create_typeis not valid. -
CL_INVALID_VALUEif value(s) specified inbuffer_create_info(for a givenbuffer_create_type) is not valid or ifbuffer_create_infois NULL. -
CL_INVALID_BUFFER_SIZEif size is 0. -
CL_MEM_OBJECT_ALLOCATION_FAILUREif there is a failure to allocate memory for sub-buffer object. -
CL_OUT_OF_RESOURCESif there is a failure to allocate resources required by the OpenCL implementation on the device. -
CL_OUT_OF_HOST_MEMORYif there is a failure to allocate resources required by the OpenCL implementation on the host.