Add cl_amd_planar_yuv extension
diff --git a/extensions/amd/cl_amd_planar_yuv.txt b/extensions/amd/cl_amd_planar_yuv.txt new file mode 100644 index 0000000..2c866c8 --- /dev/null +++ b/extensions/amd/cl_amd_planar_yuv.txt
@@ -0,0 +1,143 @@ +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 #60?? + +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. +