blob: 28b88d08f6df4405e7806a6ea52b31be6efba826 [file] [log] [blame]
Name Strings
cl_intel_packed_yuv
Contributors
Ben Ashbaugh, Intel
Contact
Ben Ashbaugh, Intel (ben.ashbaugh 'at' intel.com)
Version
Version 1, July 14, 2016
Number
OpenCL Extension #42
Status
Final Draft
Dependencies
OpenCL 1.2 is required. This extension is written against revision
19 of the OpenCL 1.2 specification.
Overview
The purpose of this extension is to provide OpenCL support for packed
YUV images.
New Procedures and Functions
None
New Tokens
Accepted as <image_channel_order> of cl_image_format:
CL_YUYV_INTEL 0x4076
CL_UYVY_INTEL 0x4077
CL_YVYU_INTEL 0x4078
CL_VYUY_INTEL 0x4079
Additions to Chapter 5 of the OpenCL 1.2 Specification:
In section 5.3.1.2 "Image Descriptor", add a sentence to the
end of the description of <image_width>:
"<image_width> is... If the image is a packed YUV image, <image_width>
is the width of the Y data and must be even."
Add to table 5.6 "List of supported Image Channel Order Values" in
section 5.3.1.1 "Image Format Descriptor":
"CL_YUYV_INTEL, CL_UYVY_INTEL, CL_YVYU_INTEL, CL_VYUY_INTEL. This format
can only be used if channel data type = CL_UNORM_INT8."
Add to section 5.3.1.1 "Image Format Descriptor" after the memory layout
descriptions for CL_RGBA image formats:
"The only supported <image_channel_data_type> for packed YUV images is
CL_UNORM_INT8.
The memory layout of a packed YUV image when <image_channel_order> is
CL_YUYV_INTEL is:
+---------+---------+---------+---------+
| Y | U | Y | V | ...
| Pixel N | Pixel N |Pixel N+1| Pixel N |
+---------+---------+---------+---------+
Byte -> 0 1 2 3
Offset
The memory layout of a packed YUV image when <image_channel_order> is
CL_UYVY_INTEL is:
+---------+---------+---------+---------+
| U | Y | V | Y | ...
| Pixel N | Pixel N | Pixel N |Pixel N+1|
+---------+---------+---------+---------+
Byte -> 0 1 2 3
Offset
The memory layout of a packed YUV image when <image_channel_order> is
CL_YVYU_INTEL is:
+---------+---------+---------+---------+
| Y | V | Y | U | ...
| Pixel N | Pixel N |Pixel N+1| Pixel N |
+---------+---------+---------+---------+
Byte -> 0 1 2 3
Offset
The memory layout of a packed YUV image when <image_channel_order> is
CL_VYUY_INTEL is:
+---------+---------+---------+---------+
| V | Y | U | Y | ...
| Pixel N | Pixel N | Pixel N |Pixel N+1|
+---------+---------+---------+---------+
Byte -> 0 1 2 3
Offset
Add a new Table 5.x "Additional Required Image Formats for Read-Only
2D Images" to section 5.3.2.1 "Minimum List of Supported Image Formats":
"--------------------------------------------------------------------
image_num_channels image_channel_order image_channel_data_type
------------------ ------------------- -----------------------
2 CL_YUYV_INTEL CL_UNORM_INT8
2 CL_UYVY_INTEL CL_UNORM_INT8
2 CL_YVYU_INTEL CL_UNORM_INT8
2 CL_VYUY_INTEL CL_UNORM_INT8
--------------------------------------------------------------------"
In section 5.3.3 "Reading, Writing, and Copying Image Objects", add a
sentence to the end of the descriptions of <origin> and <region> under
clEnqueueReadImage and clEnqueueWriteImage:
"<origin> defines... If <image> is a packed YUV image, the x value given
by <origin>[0] indexes Y data in the image and must be even.
<region> defines... If <image> is a packed YUV image, the width value
given by <origin>[0] describes Y data image and must be even."
Add a sentence to the end of the descriptions of <src_origin>,
<dst_origin>, and <region> under clEnqueueCopyImage:
"<src_origin> defines... If <src_image> is a packed YUV image, the x
value given by <src_origin>[0] indexes Y data in <src_image> and must
be even.
<dst_origin> defines... If <dst_image> is a 2D image object, the z
value given by <dst_origin>[2] must be 0. If <dst_image> is a packed
YUV image, the x value given by <dst_origin>[0] indexes Y data in
<dst_image> and must be even.
<region> defines... If <src_image> or <dst_image> is a packed YUV
image, the <width> value given by <region>[0] describes Y data and
must be even."
In section 5.3.5 "Copying between Image and Buffer Objects", add a
sentence to the end of the descriptions of <src_origin> and <region>
for clEnqueueCopyImageToBuffer:
"<src_origin> defines... If <src_image> is a packed YUV image, the x
value given by <origin>[0] indexes Y data in the image and must be
even.
<region> defines... If <src_image> is a packed YUV image, the width
value given by <origin>[0] describes Y data and must be even."
Add a sentence to the end of the descriptions of <dst_origin> and
<region> for clEnqueueCopyBufferToImage:
"<dst_origin> defines... If <dst_image> is a packed YUV image, the x
value given by <origin>[0] indexes Y data in the image and must be
even.
<region> defines... If <dst_image> is a packed YUV image, the width
value given by <region>[0] describes Y data and must be even."
In section 5.3.6 "Mapping Image Objects", add a sentence to the end
of the descriptions of <origin> and <region> for clEnqueueMapImage:
"<origin> defines... If <image> is a packed YUV image, the x value
given by <origin>[0] describes Y data and must be even.
<region> defines... If <image> is a packed YUV image, the width
value given by <region>[0] describes Y data and must be even."
Additions to Chapter 6 of the OpenCL 1.2 Specification:
In section 6.12.14.1.1 "Determining the border color", add the
packed YUV formats to the second bullet describing the cases where
the border color is (0.0f, 0.0f, 0.0f, 1.0f):
" * If image channel order is CL_R, CL_RG, CL_RGB, CL_LUMINANCE,
CL_YUYV_INTEL, CL_UYVY_INTEL, CL_YVYU_INTEL, or CL_VYUY_INTEL,
the border color is (0.0f, 0.0f, 0.0f, 1.0f)."
Add to the un-numbered table in section 6.12.14.6 "Mapping image
channels to color values returned by read_image and color values
passed to write_image to image channels":
"--------------------------------------------------------------
float4, int4 or unsigned int4
Channel Order components of channel data
----------------------------- -----------------------------
CL_YUYV_INTEL, CL_UYVY_INTEL, ( V, Y, U, 1.0 )
CL_YVYU_INTEL, CL_VYUY_INTEL
--------------------------------------------------------------"
Revision History
Version 1 - Initial Revision