C Specification
To create a new buffer object (referred to as a sub-buffer object) from an existing buffer object, call the function
// Provided by CL_VERSION_1_1
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);
| clCreateSubBuffer is missing before version 1.1. |
Parameters
-
buffer must be a valid buffer object and cannot be a sub-buffer object.
-
flags is 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 Memory Flags table. If the
CL_MEM_,READ_ WRITE CL_MEM_,READ_ ONLY CL_MEM_, orIMMUTABLE_ EXT CL_MEM_values are not specified in flags, they are inherited from the corresponding memory access qualifiers associated with buffer. TheWRITE_ ONLY CL_MEM_,USE_ HOST_ PTR CL_MEM_, andALLOC_ HOST_ PTR CL_MEM_values cannot be specified in flags but are inherited from the corresponding memory access qualifiers associated with buffer. IfCOPY_ HOST_ PTR CL_MEM_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 theCOPY_ HOST_ PTR CL_MEM_,HOST_ WRITE_ ONLY CL_MEM_, orHOST_ READ_ ONLY CL_MEM_values are not specified in flags, they are inherited from the corresponding memory access qualifiers associated with buffer.HOST_ NO_ ACCESS -
buffer_create_type and buffer_create_info describe 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 in the SubBuffer Attributes table.
Description
| Buffer Creation Type | Description |
|---|---|
missing before version 1.1. |
Create a buffer object that represents a specific region in buffer. buffer_create_info is a pointer to a If buffer is created with The buffer object returned references the data store allocated for buffer and points to the region specified by buffer_create_info in this data store. |
clCreateSubBuffer returns CL_SUCCESS if the function is executed
successfully.
Otherwise, it returns one of the following errors in errcode_ret:
-
CL_INVALID_if buffer is not a valid buffer object or is a sub-buffer object.MEM_ OBJECT -
CL_INVALID_if buffer was created withVALUE CL_MEM_and flags specifiesWRITE_ ONLY CL_MEM_orREAD_ WRITE CL_MEM_, or if buffer was created withREAD_ ONLY CL_MEM_and flags specifiesREAD_ ONLY CL_MEM_orREAD_ WRITE CL_MEM_, or if flags specifiesWRITE_ ONLY CL_MEM_orUSE_ HOST_ PTR CL_MEM_orALLOC_ HOST_ PTR CL_MEM_.COPY_ HOST_ PTR -
CL_INVALID_if buffer was created withVALUE CL_MEM_and flags specifyHOST_ WRITE_ ONLY CL_MEM_, or if buffer was created withHOST_ READ_ ONLY CL_MEM_and flags specifyHOST_ READ_ ONLY CL_MEM_, or if buffer was created withHOST_ WRITE_ ONLY CL_MEM_and flags specifyHOST_ NO_ ACCESS CL_MEM_orHOST_ READ_ ONLY CL_MEM_.HOST_ WRITE_ ONLY -
CL_INVALID_if the value specified in buffer_create_type is not valid.VALUE -
CL_INVALID_if value(s) specified in buffer_create_info (for a given buffer_create_type) is not valid or if buffer_create_info isVALUE NULL. -
CL_MEM_if there is a failure to allocate memory for sub-buffer object.OBJECT_ ALLOCATION_ FAILURE -
CL_OUT_if there is a failure to allocate resources required by the OpenCL implementation on the device.OF_ RESOURCES -
CL_OUT_if there is a failure to allocate resources required by the OpenCL implementation on the host.OF_ HOST_ MEMORY -
CL_INVALID_if the region specified by theVALUE cl_buffer_structure passed in buffer_create_info is out of bounds in buffer.region -
CL_INVALID_if the size field of theBUFFER_ SIZE cl_buffer_structure passed in buffer_create_info is 0.region -
CL_MISALIGNED_if there are no devices in context associated with buffer for which the origin field of theSUB_ BUFFER_ OFFSET cl_buffer_structure passed in buffer_create_info is aligned to theregion CL_DEVICE_value.MEM_ BASE_ ADDR_ ALIGN -
CL_INVALID_if buffer was created withVALUE CL_MEM_and flags specifiesIMMUTABLE_ EXT CL_MEM_,READ_ WRITE CL_MEM_, orWRITE_ ONLY CL_MEM_.HOST_ WRITE_ ONLY
|
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. |
Document Notes
For more information, see the OpenCL Specification
This page is extracted from the OpenCL Specification. Fixes and changes should be made to the Specification, not directly.