blob: 0e903507255ed4a587d7064e0bc31b78ac59eff5 [file] [log] [blame]
Name Strings
cl_amd_planar_yuv
Contributors
Brian Sumner
German Andryeyev
Contact
Brian Sumner, AMD (Brian.Sumner 'at' amd.com)
IP Status
No known IP issues.
Version
Version 1.0, May 10, 2018
Number
OpenCL Extension #54
Status
Draft
Extension Type
OpenCL platform extension
Dependencies
OpenCL 2.0, cl_khr_d3d11_sharing
Overview
This extension extends the cl_khr_d3d11_sharing function
clCreateFromD3D11Texture2DKHR to accept resources in planar YUV formats
sucn as NV12 and P010. It also adds a new runtime API call to create
new images from the Y or UV plane of images createed using
clCreateFromD3D11Texture2DKHR.
New Procedures and Functions
cl_mem clGetPlaneFromImageAMD(cl_context context,
cl_mem mem, cl_uint plane, cl_int* errcode_ret);
New Types
None
New Tokens
Macros for the <plane> argument passed to clGetPlaneFromImageAMD:
CL_YUV_IMAGE_Y_PLANE_AMD 0x0
CL_YUV_IMAGE_UV_PLANE_AMD 0x1
Additions to section 9.10.7.4 Sharing Direct3D 11 Texture and Resources as
OpenCL Image Objects
Add the following to table 9.11.3
+---------------------+---------------------------+
| DXGI format | CL image format (channel |
| | order, channel data type) |
+---------------------+---------------------------+
| DXGI_FORMAT_NV12 | CL_R, CL_UNSIGNED_INT8 |
| DXGI_FORMAT_P010 | CL_R, CL_UNSIGNED_INT16 |
+---------------------+---------------------------+
Add the following Note to the end of section 9.10.7.4:
Note: In table 9.11.3, the DXGI formats DXGI_FORMAT_NV12 and
DXGI_FORMAT_P010 are only permitted for ID3D11Texture2D resource arguments
to clCreateFromD3D11Texture2DKHR
Add the following to section 5.3.1 Creating Image Objects
The function
cl_mem clGetPlaneFromImageAMD(cl_context context,
cl_mem mem,
cl_uint plane,
cl_int* errcode_ret)
creates an OpenCL 2D image object from a particular YUV
plane of an OpenCL Direct3D 11 interop image.
<context> is a valid OpenCL context created from a Direct3D 11 device.
<mem> is an OpenCL interop image created from a D3D11 resource with
DXGI format DXGI_FORMAT_NV12 or DXGI_FORMAT_P010
<plane> selects the plane used to create the image and is either
CL_YUV_IMAGE_Y_PLANE_AMD or CL_YUV_IMAGE_UV_PLANE_AMD.
<errcode_ret> will return an appropriate error code. If <errcode_ret> is
NULL, no error code is returned
The following table specifies the format of the image created by
clGetPlaneFromImageAMD:
+---------------------------+-----------+------------------+
| <plane> value | Channel | channel mappings |
| | order | |
+---------------------------+-----------+------------------+
| CL_YUV_IMAGE_Y_PLANE_AMD | CL_R | R = Y |
| CL_YUV_IMAGE_UV_PLANE_AMD | CL_RG | R = U, G = V |
+---------------------------+-----------+------------------+
The dimensions of the created image are as follows: if the
dimensions of the original D3D11 texture are (width, height),
the dimensions of the Y plane image will be (width, height), and the
dimensions of the UV plange image will be (width/2, height/2).
clGetPlaneFromImageAMD returns a valid non-zero image object created
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 plane are not valid or if <mem>
object is NULL.
CL_INVALID_MEM_OBJECT is generated if <mem> is not a valid cl_mem object.
CL_INVALID_D3D11_RESOURCE_KHR if <mem> is not a valid interop image from
a YUV texture allocated in D3D11.
CL_MEM_OBJECT_ALLOCATION_FAILURE if OCL runtime failed to allocate
a new image for the specified plane.
CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources
required by the OpenCL implementation on the host.
Revision History
Version 1, 2018/05/10 (Brian Sumner) - initial extension specification.