cancel
Showing results for 
Search instead for 
Did you mean: 

Archives Discussions

sajis997
Adept I

image_channel_data_type

Hi forum,

The number of bits per element is determined by image_channel_data_type. Is there any mechanism to check if the image type the application is dealing with has the invalid number of bits in it?

Regards

Sajjadul

0 Likes
5 Replies
himanshu_gautam
Grandmaster

Please explain the question in more details. Probably use some code. What do you mean by invalid number of bits?

0 Likes

Lets try with the following snippet.

cl_image_format data_format;

data_format.image_channel_order = CL_RGBA;

data_format.image_channel_data_type = CL_UNORM_INT8;

According to the specification OpenCL implementation must maintain the minimum precision specified by the number of bits in image_channel_data_type. If the image format specified by image_channel_data_type and

image_channel_order cannot be supported by the OpenCL implementation, then call to the clCreateImage2/3D() will return a NULL  memory object.

I want to check the validity of the values set to the data_format before sending it to the either of the functions clCreateImage2D/clCreateImage3D() so that i do not get a NULL memory object.

How do i do it ?

0 Likes

Still not very sure about the question.

IMHO you need to have 3 things to create a image: cl_image_format, cl_image_desc, and a host side buffer to create image from. Do you mean that you do not have control over host side buffer? It may be in any format or of any size?

Note clCreateImage2D/3D have been deprecated since OpenCL 1.2. Use clCreateImage instead.

0 Likes

How do i check if the user mention INVALID image_channel_order or INVALID image_channel_data_type. The VALID values are mentioned in the table of OpenCL spec 1.1.

Since i am developing on NVIDIA device, i am yet to work with the updated spec unfortunately.

Regards

Sajjadul

0 Likes

How can we know before whether a particular image_channel_order or data_type is invalid, without checking it against the input?

As per OpenCL recommended way is to catch the error from the API clCreateImage2D/3D:

clCreateImage2D 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_SIZE if image_width or image_height are 0 or if they exceed

values specified in CL_DEVICE_IMAGE2D_MAX_WIDTH or

CL_DEVICE_IMAGE2D_MAX_HEIGHT respectively for all devices in context or if values

specified by image_row_pitch do not follow rules described in the argument description

above.

CL_INVALID_HOST_PTR if host_ptr 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_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 table 4.3 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

0 Likes