| Name Strings |
| |
| cl_qcom_ext_host_ptr |
| |
| Contributors |
| |
| Balaji Calidas, Qualcomm Technologies, Inc. |
| David Garcia, Qualcomm Technologies, Inc. |
| Rajeev Rao, Qualcomm Technologies, Inc. |
| Sushmita Susheelendra, Qualcomm Innovation Center, Inc. |
| |
| Contact |
| |
| bcalidas at qti dot qualcomm dot com |
| |
| Version |
| |
| Version 5, 2018/01/19 |
| |
| Number |
| |
| OpenCL Extension #21 |
| |
| Status |
| |
| Shipping |
| |
| Extension Type |
| |
| OpenCL device extension |
| |
| Dependencies |
| |
| OpenCL 1.1 is required. |
| |
| This extension is written against the OpenCL 1.1 specification |
| |
| Overview |
| |
| This extension extends the functionality provided by clCreateBuffer, |
| clCreateImage2D, clCreateImage3D. It allows applications to specify a new |
| flag CL_MEM_EXT_HOST_PTR_QCOM which enables the driver to map external |
| memory allocations, to be defined in layered extensions, to the device's |
| address space and thus avoiding having to copy data back and forth between |
| the host and the device. |
| |
| Header File |
| |
| cl_ext.h |
| |
| New Procedures and Functions |
| |
| cl_int clGetDeviceImageInfoQCOM( |
| cl_device_id device, |
| size_t image_width, |
| size_t image_height, |
| const cl_image_format *image_format, |
| cl_image_pitch_info_qcom param_name, |
| size_t param_value_size, |
| void *param_value, |
| size_t *param_value_size_ret); |
| |
| New Types |
| |
| typedef cl_uint cl_image_pitch_info_qcom; |
| |
| New Tokens |
| |
| Accepted by the <param_name> argument of clGetDeviceInfo |
| |
| CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM 0x40A0 |
| CL_DEVICE_PAGE_SIZE_QCOM 0x40A1 |
| |
| Accepted by the <flags> argument of clCreateBuffer, clCreateImage2D and |
| clCreateImage3D: |
| |
| CL_MEM_EXT_HOST_PTR_QCOM (1 << 29) |
| |
| Accepted by the <host_ptr> argument of clCreateBuffer, clCreateImage2D and |
| clCreateImage3D: |
| |
| typedef struct _cl_mem_ext_host_ptr |
| { |
| // Type of external memory allocation. |
| // Legal values will be defined in layered extensions. |
| cl_uint allocation_type; |
| |
| // Host cache policy for this external memory allocation. |
| cl_uint host_cache_policy; |
| |
| } cl_mem_ext_host_ptr; |
| |
| Accepted values for cl_mem_ext_host_ptr::host_cache_policy: |
| |
| CL_MEM_HOST_UNCACHED_QCOM 0x40A4 |
| CL_MEM_HOST_WRITEBACK_QCOM 0x40A5 |
| CL_MEM_HOST_WRITETHROUGH_QCOM 0x40A6 |
| CL_MEM_HOST_WRITE_COMBINING_QCOM 0x40A7 |
| |
| Accepted by the <param_name> argument of clGetDeviceImageInfoQCOM |
| |
| CL_IMAGE_ROW_ALIGNMENT_QCOM 0x40A2 |
| CL_IMAGE_SLICE_ALIGNMENT_QCOM 0x40A3 |
| |
| Additions to Chapter 5.2.1 of the OpenCL 1.1 Specification |
| (Creating Buffer Objects) |
| |
| Add the following token to Table 5.3 (clCreateBuffer List of supported |
| cl_mem_flags values): |
| |
| CL_MEM_EXT_HOST_PTR_QCOM This flag is valid only when used |
| together with CL_MEM_USE_HOST_PTR. |
| If specified, it indicates that the |
| <host_ptr> argument provided by the |
| application is actually a pointer |
| to cl_mem_ext_host_ptr. |
| |
| |
| When CL_MEM_EXT_HOST_PTR_QCOM is enabled in the <flags> argument, then |
| <host_ptr> is interpreted as a pointer to cl_mem_ext_host_ptr. The |
| application must then initialize cl_mem_ext_host_ptr::allocation_type to |
| the allowed token values defined in future layered extensions. |
| |
| The application must also initialize |
| cl_mem_ext_host_ptr::host_cache_policy to one of |
| CL_MEM_HOST_UNCACHED_QCOM, CL_MEM_HOST_WRITEBACK_QCOM, |
| CL_MEM_HOST_WRITETHROUGH_QCOM, or CL_MEM_HOST_WRITE_COMBINING_QCOM |
| according to the cache policy used in the host for this memory |
| allocation. |
| |
| Add the following token to Table 4.3 (clGetDeviceInfo OpenCL Device |
| Queries): |
| |
| CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM Returns the amount of memory |
| padding that the application |
| must add to the end of every |
| external allocation that will |
| be used in conjunction with |
| CL_MEM_EXT_HOST_PTR_QCOM. |
| |
| CL_DEVICE_PAGE_SIZE_QCOM Returns the device's page |
| size. |
| |
| The application may query the row and slice pitch values using |
| clGetDeviceImageInfoQCOM and provide the queried values or any other |
| supported value to clCreateImage2D and clCreateImage3D when using |
| CL_MEM_EXT_HOST_PTR_QCOM. |
| |
| A supported value for row pitch and slice pitch is defined respectively |
| as: |
| |
| * Any value greater than or equal to CL_IMAGE_ROW_PITCH that is also a |
| multiple of CL_IMAGE_ROW_ALIGNMENT_QCOM. |
| * Any value greater than or equal to CL_IMAGE_SLICE_PITCH that is also |
| a multiple of CL_IMAGE_SLICE_ALIGNMENT_QCOM. |
| |
| Additions to Section 5.3 after clGetImageInfo |
| |
| An application that creates OpenCL image objects with the |
| CL_MEM_EXT_HOST_PTR_QCOM flag can invoke the following function to query the |
| required row pitch, slice pitch and alignment for a particular device: |
| |
| cl_int clGetDeviceImageInfoQCOM( |
| cl_device_id device, |
| size_t image_width, |
| size_t image_height, |
| const cl_image_format *image_format, |
| cl_image_pitch_info_qcom param_name, |
| size_t param_value_size, |
| void *param_value, |
| size_t *param_value_size_ret); |
| |
| device - is a valid device |
| |
| image_width - width of the image in image elements (pixels) |
| |
| image_height - height of the image in image elements (pixels) |
| |
| image_format - pointer to image format descriptor structure |
| |
| param_name - specifies the information to query. The list of |
| supported param_name types and the information |
| returned in param_value by clGetImageInfo is |
| described in Table 5.XXX |
| |
| param_value - is a pointer to memory where the appropriate result |
| being queried is returned. If param_value is NULL, it |
| is ignored. |
| |
| param_value_size - is used to specify the size in bytes of memory |
| pointed to by param_value. This size must be greater |
| than or equal to the size of return type as described |
| in Table 5.8. |
| |
| param_value_size_ret - returns the actual size in bytes of data being |
| queried by param_value. If param_value_size_ret is |
| NULL, it is ignored. |
| |
| clGetDeviceImageInfoQCOM returns CL_SUCCESS if the function is executed |
| successfully. Otherwise, it returns one of the following errors: |
| |
| CL_INVALID_VALUE - if param_name is not valid, or if size in bytes |
| specified by param_value_size is less than the |
| size of return type for that param_value and |
| param_value is not NULL. |
| |
| CL_INVALID_MEM_OBJECT - if image is a not a valid image 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. |
| |
| Table 5.XXX |
| |
| List of supported param_names by clGetDeviceImageInfoQCOM |
| |
| cl_image_pitch_info_qcom Return Type Info returned in |
| param_value |
| |
| CL_IMAGE_ROW_PITCH cl_uint Returns the image row pitch |
| supported by this device |
| |
| CL_IMAGE_ROW_ALIGNMENT_QCOM cl_uint Returns the image row pitch |
| alignment supported by this |
| device |
| |
| CL_IMAGE_SLICE_PITCH cl_uint Returns the image slice |
| pitch supported by this |
| device |
| |
| CL_IMAGE_SLICE_ALIGNMENT_QCOM cl_uint Returns the image slice |
| pitch alignment supported |
| by this device |
| |
| Additions to Section 5.3.1. (Creating Image Objects) at the end of the list of |
| errors returned by clCreateImage2D and clCreateImage3D: |
| |
| CL_INVALID_VALUE if <flags> has CL_MEM_EXT_HOST_PTR_QCOM enabled and yet |
| CL_MEM_USE_HOST_PTR is not enabled. |
| |
| CL_INVALID_VALUE if <flags> has CL_MEM_EXT_HOST_PTR_QCOM enabled and if |
| <image_row_pitch> and/or <image_slice_pitch> fail to match the requirements |
| of section 5.3 |
| |
| CL_INVALID_VALUE if any of the fields in the struct pointed at by <host_ptr> |
| are invalid. |
| |
| Revision History |
| |
| Revision 1, 2013/05/27: Initial version. |
| Revision 2, 2017/06/16: Clean up. No functional changes. |
| Revision 3, 2017/11/13: Clean up. No functional changes. |
| Revision 4, 2017/11/30: Corrected parameter description for |
| clGetDeviceImageInfoQCOM. |
| Revision 5, 2018/01/19: Formatting and misc changes. No functional changes. |
| |