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 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. is a valid OpenCL context created from a Direct3D 11 device. is an OpenCL interop image created from a D3D11 resource with DXGI format DXGI_FORMAT_NV12 or DXGI_FORMAT_P010 selects the plane used to create the image and is either CL_YUV_IMAGE_Y_PLANE_AMD or CL_YUV_IMAGE_UV_PLANE_AMD. will return an appropriate error code. If is NULL, no error code is returned The following table specifies the format of the image created by clGetPlaneFromImageAMD: +---------------------------+-----------+------------------+ | 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 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 : CL_INVALID_CONTEXT if context is not a valid context. CL_INVALID_VALUE if values specified in plane are not valid or if object is NULL. CL_INVALID_MEM_OBJECT is generated if is not a valid cl_mem object. CL_INVALID_D3D11_RESOURCE_KHR if 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.