logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

clCreateImage - Creates a 1D image, 1D image buffer, 1D image array, 2D image, 2D image array or 3D image

Authors

TheKhronosGroup

Errors

clCreateImage returns a valid non-zero image object and errcode_ret is set to CL_SUCCESS if the image
       object is created successfully. Otherwise, it returns a NULL value with one of the following error values
       returned in errcode_ret:

       •   CL_INVALID_CONTEXT if context is not a valid context.

       •   CL_INVALID_VALUE if values specified in flags are not valid.

       •   CL_INVALID_IMAGE_FORMAT_DESCRIPTOR if values specified in image_format are not valid or if
           image_format is NULL.

       •   CL_INVALID_IMAGE_DESCRIPTOR if values specified in image_desc are not valid or if image_desc is NULL.

       •   CL_INVALID_IMAGE_SIZE if image dimensions specified in image_desc exceed the minimum maximum image
           dimensions described in the table of allowed values for param_name for clGetDeviceInfo(3clc) for all
           devices in context.

       •   CL_INVALID_HOST_PTR if host_ptr in image_desc is NULL and CL_MEM_USE_HOST_PTR or CL_MEM_COPY_HOST_PTR
           are set in flags or if host_ptr is not NULL but CL_MEM_COPY_HOST_PTR or CL_MEM_USE_HOST_PTR are not
           set in flags.

       •   CL_INVALID_VALUE if a 1D image buffer is being created and the buffer object was created with
           CL_MEM_WRITE_ONLY and flags specifies CL_MEM_READ_WRITE or CL_MEM_READ_ONLY, or if the buffer object
           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.

       •   CL_INVALID_VALUE if a 1D image buffer is being created and the buffer object was created with
           CL_MEM_HOST_WRITE_ONLY and flags specifies CL_MEM_HOST_READ_ONLY, or if the buffer object was created
           with CL_MEM_HOST_READ_ONLY and flags specifies CL_MEM_HOST_WRITE_ONLY, or if the buffer object was
           created with CL_MEM_HOST_NO_ACCESS and flags specifies CL_MEM_HOST_READ_ONLY or
           CL_MEM_HOST_WRITE_ONLY.

       •   CL_IMAGE_FORMAT_NOT_SUPPORTED if the image_format is not supported.

       •   CL_MEM_OBJECT_ALLOCATION_FAILURE if there is a failure to allocate memory for image object.

       •   CL_INVALID_OPERATION if there are no devices in context that support images (i.e.
           CL_DEVICE_IMAGE_SUPPORT (specified in the table of OpenCL Device Queries for clGetDeviceInfo(3clc))
           is CL_FALSE).

       •   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.

Name

       clCreateImage - Creates a 1D image, 1D image buffer, 1D image array, 2D image, 2D image array or 3D image
       object.

       cl_memclCreateImage(cl_contextcontext,cl_mem_flagsflags,constcl_image_format*image_format,constcl_image_desc*image_desc,void*host_ptr,cl_int*errcode_ret);

Notes

        1. OpenCL Specification
           page 90, section 5.3.1 - Creating Image Objects

The Khronos Group                                  11/18/2024                                CLCREATEIMAGE(3clc)

Parameters

context
           A valid OpenCL context on which the image object is to be created.

        flags
           A bit-field that is used to specify allocation and usage information about the image memory object
           being created and is described in the table below.

           For all image types except CL_MEM_OBJECT_IMAGE1D_BUFFER, if value specified for flags is 0, the
           default is used which is CL_MEM_READ_WRITE.

           For CL_MEM_OBJECT_IMAGE1D_BUFFER image type, 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_flagsDescription                           │
           ├────────────────────────┼───────────────────────────────────────┤
           │ 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_WRITE_ONLY inside │
           │                        │ a kernel is undefined.                │
           │                        │                                       │
           │                        │ CL_MEM_READ_WRITE and                 │
           │                        │ CL_MEM_WRITE_ONLY are mutually        │
           │                        │ exclusive.                            │
           ├────────────────────────┼───────────────────────────────────────┤
           │ 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_READ_ONLY inside  │
           │                        │ a kernel is undefined.                │
           │                        │                                       │
           │                        │ CL_MEM_READ_WRITE or                  │
           │                        │ CL_MEM_WRITE_ONLY and                 │
           │                        │ CL_MEM_READ_ONLY are mutually         │
           │                        │ exclusive.                            │
           ├────────────────────────┼───────────────────────────────────────┤
           │ CL_MEM_USE_HOST_PTR    │ This flag is valid only if host_ptr   │
           │                        │ is not NULL. If specified, it         │
           │                        │ indicates that the application wants  │
           │                        │ the OpenCL implementation to use      │
           │                        │ memory referenced by host_ptr as the  │
           │                        │ storage bits for the memory object.   │
           │                        │                                       │
           │                        │ OpenCL implementations are allowed to │
           │                        │ cache the buffer contents pointed to  │
           │                        │ by host_ptr in device memory. This    │
           │                        │ cached copy can be used when kernels  │
           │                        │ are executed on a device.             │
           │                        │                                       │
           │                        │ The result of OpenCL commands that    │
           │                        │ operate on multiple buffer objects    │
           │                        │ created with the same host_ptr or     │
           │                        │ overlapping host regions is           │
           │                        │ considered to be undefined.           │
           │                        │                                       │
           │                        │ Refer to the dataTypes(3clc) for      │
           │                        │ host_ptr for memory objects (buffer   │
           │                        │ and images) created using             │
           │                        │ CL_MEM_USE_HOST_PTR.                  │
           ├────────────────────────┼───────────────────────────────────────┤
           │ CL_MEM_ALLOC_HOST_PTR  │ This flag specifies that the          │
           │                        │ application wants the OpenCL          │
           │                        │ implementation to allocate memory     │
           │                        │ from host accessible memory.          │
           │                        │                                       │
           │                        │ CL_MEM_ALLOC_HOST_PTR and             │
           │                        │ CL_MEM_USE_HOST_PTR are mutually      │
           │                        │ exclusive.                            │
           ├────────────────────────┼───────────────────────────────────────┤
           │ CL_MEM_COPY_HOST_PTR   │ This flag is valid only if host_ptr   │
           │                        │ is not NULL. If specified, it         │
           │                        │ indicates that the application wants  │
           │                        │ the OpenCL implementation to allocate │
           │                        │ memory for the memory object and copy │
           │                        │ the data from memory referenced by    │
           │                        │ host_ptr.                             │
           │                        │                                       │
           │                        │ CL_MEM_COPY_HOST_PTR and              │
           │                        │ CL_MEM_USE_HOST_PTR are mutually      │
           │                        │ exclusive.                            │
           │                        │                                       │
           │                        │ CL_MEM_COPY_HOST_PTR can be used with │
           │                        │ CL_MEM_ALLOC_HOST_PTR to initialize   │
           │                        │ the contents of the cl_mem object     │
           │                        │ allocated using host-accessible (e.g. │
           │                        │ PCIe) memory.                         │
           ├────────────────────────┼───────────────────────────────────────┤
           │ 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_WRITE_ONLY and            │
           │                        │ CL_MEM_HOST_READ_ONLY are mutually    │
           │                        │ exclusive.                            │
           ├────────────────────────┼───────────────────────────────────────┤
           │ CL_MEM_HOST_NO_ACCESS  │ This flag specifies that the host     │
           │                        │ will not read or write the memory     │
           │                        │ object.                               │
           │                        │                                       │
           │                        │ CL_MEM_HOST_WRITE_ONLY or             │
           │                        │ CL_MEM_HOST_READ_ONLY and             │
           │                        │ CL_MEM_HOST_NO_ACCESS are mutually    │
           │                        │ exclusive.                            │
           └────────────────────────┴───────────────────────────────────────┘

        image_format
           A pointer to a structure that describes format properties of the image to be allocated. See
           cl_image_format(3clc) for a detailed description of the image format descriptor.

        image_desc
           A pointer to a structure that describes type and dimensions of the image to be allocated. See
           imageDescriptor(3clc) for more information.

        host_ptr
           A pointer to the image data that may already be allocated by the application. Refer to table below
           for a description of how large the buffer that host_ptr points to must be.
           ┌──────────────────────────────┬─────────────────────────────────────┐
           │ ImageTypeSizeofbufferthathost_ptr points │
           │                              │ to                                  │
           ├──────────────────────────────┼─────────────────────────────────────┤
           │ CL_MEM_OBJECT_IMAGE1Dimage_row_pitch                   │
           ├──────────────────────────────┼─────────────────────────────────────┤
           │ CL_MEM_OBJECT_IMAGE1D_BUFFERimage_row_pitch                   │
           ├──────────────────────────────┼─────────────────────────────────────┤
           │ CL_MEM_OBJECT_IMAGE2Dimage_row_pitch*image_height    │
           ├──────────────────────────────┼─────────────────────────────────────┤
           │ CL_MEM_OBJECT_IMAGE3Dimage_slice_pitch*image_depth   │
           ├──────────────────────────────┼─────────────────────────────────────┤
           │ CL_MEM_OBJECT_IMAGE1D_ARRAYimage_slice_pitch*               │
           │                              │ image_array_size                    │
           ├──────────────────────────────┼─────────────────────────────────────┤
           │ CL_MEM_OBJECT_IMAGE2D_ARRAYimage_slice_pitch*               │
           │                              │ image_array_size                    │
           └──────────────────────────────┴─────────────────────────────────────┘

           For a 3D image or 2D image array, the image data specified by host_ptr is stored as a linear sequence
           of adjacent 2D image slices or 2D images respectively. Each 2D image is a linear sequence of adjacent
           scanlines. Each scanline is a linear sequence of image elements.

           For a 2D image, the image data specified by host_ptr is stored as a linear sequence of adjacent
           scanlines. Each scanline is a linear sequence of image elements.

           For a 1D image array, the image data specified by host_ptr is stored as a linear sequence of adjacent
           1D images respectively. Each 1D image or 1D image buffer is a single scanline which is a linear
           sequence of adjacent elements.

        errcode_ret
           Will return an appropriate error code. If errcode_ret is NULL, no error code is returned.

See Also

imageDescriptor(3clc), cl_image_format(3clc), classDiagram(3clc)

Specification

OpenCLSpecification[1]

See Also