Merge pull request #44 from b-sumner/master
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..0e90350
--- /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 #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.
+
diff --git a/extensions/clext.php b/extensions/clext.php
index 9f4f388..bc0bf81 100644
--- a/extensions/clext.php
+++ b/extensions/clext.php
@@ -105,4 +105,6 @@
</li>
<li value=53><a href="extensions/qcom/cl_qcom_ext_host_ptr_iocoherent.txt">cl_qcom_ext_host_ptr_iocoherent</a>
</li>
+<li value=54><a href="extensions/amd/cl_amd_planar_yuv.txt">cl_amd_planar_yuv</a>
+</li>
</ol>
diff --git a/extensions/registry.py b/extensions/registry.py
index 2134461..7a4ac11 100644
--- a/extensions/registry.py
+++ b/extensions/registry.py
@@ -266,4 +266,9 @@
'flags' : { 'public' },
'url' : 'extensions/qcom/cl_qcom_ext_host_ptr_iocoherent.txt',
},
+ 'cl_amd_planar_yuv' : {
+ 'number' : 54,
+ 'flags' : { 'public' },
+ 'url' : 'extensions/amd/cl_amd_planar_yuv.txt',
+ },
}