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.
Copyright © 2007-2013 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials.