Name

    IMG_yuv_image

Name Strings

    cl_img_yuv_image

Contributors

    James Laverack
    Rob Quill

Contacts

    James Laverack, Imagination Technoligies (james.laverack 'at' imgtec.com)
    Rob Quill, Imagination Technoligies (robert.quill 'at' imgtec.com)

Status

    Approved.

Version

    Revision: #3, May 23th, 2018

Number

    OpenCL Extension #46

Dependencies

    Requires OpenCL version 1.2 or later.

    This extension is written against the wording of the OpenCL 1.2
    Specification.

Overview

    This extension provides new image formats to read YUV images, such
    as those provided by cameras on mobile devices.

New Tokens

    New image channel order enums:

    CL_NV21_IMG                         0x40D0
    CL_YV12_IMG                         0x40D1

Additions to Chapter 5 of the OpenCL 1.2 Specification (Image Objects)

    In Section 5.3.1, page 93, append the following to the list of error
    conditions for clCreateImage:

    "CL_INVALID_IMAGE_SIZE if the image_channel_order is CL_NV21_IMG or CL_YV12_IMG
     and image dimensions specified in image_desc are not supported for
     all devices in context."

    "CL_INVALID_VALUE if the image_channel_order is CL_NV21_IMG or CL_YV12_IMG and
     the image_desc is not CL_MEM_OBJECT_IMAGE2D."

    In Section 5.3.1.1, page 94, add the following to Table 5.6:

    "CL_NV21_IMG, CL_YV12_IMG. This format can only be used if channel
     data type = CL_UNORM_INT8"

    In Section 5.3.3, page 102, append the following to the list of error
    conditions for clEnqueueReadImage and clEnququWriteImage:

    "CL_INVALID_VALUE if image_channel_order is CL_NV21_IMG or CL_YV12_IMG and the region
     is not the full size of the image and/or the origin is not (0, 0)."

    In Section 5.3.4, page 108, append the following to the list of error
    conditions for clEnqueueFillImage:

    "CL_IMAGE_FORMAT_NOT_SUPPORTED if image_channel_order is CL_NV21_IMG or
     CL_YV12_IMG."

    In Section 5.3.6, page 116, append the following to the list of error
    conditions for clEnqueueMapImage:

    "CL_INVALID_VALUE if image_channel_order is CL_NV21_IMG or CL_YV12_IMG and the region
     is not the full size of the image and/or the origin is not (0, 0)."

Additions to Chapter 8 of the OpenCL 1.2 Specification (Addressing and Filter Modes)

    In Section 8.2, page 335, replace the first paragraph of the Note with the following
    text:

    "If the sampler is specified as using unnormalized coordinates (floating-point or integer
     coordinates), filter mode set to CLK_FILTER_NEAREST and addressing mode set to one of the
     following modes - CLK_ADDRESS_NONE, CLK_ADDRESS_CLAMP_TO_EDGE or
     CLK_ADDRESS_CLAMP, and image_channel_order is not CL_NV21_IMG or CL_YV12_IMG then the location
     of the image element in the image given by (i, j, k) in section 8.2 will be computed
     without any loss of precision."

Revision History

#1    - Initial revision.

#2    - Replace CL_NV21 and CL_YV12 with CL_NV21_IMG and CL_YV12_IMG respectively.

#3    - Remove duplicate 'for'.
