| |
| <!-- 9.9 DX9 Media Surface Sharing --> |
| <!-- 9.9.1 Overview --> |
| |
| <bridgehead>OBSOLETE!!!!!!!! DX9 Media Surface Sharing</bridgehead> |
| |
| <para> |
| The goal of this extension is to allow applications |
| to use media surfaces as OpenCL memory objects. This allows efficient sharing of data |
| between OpenCL and selected adapter APIs (only DX9 for now). If this extension is supported, |
| an OpenCL image object can be created from a media surface and the OpenCL API can be used |
| to execute kernels that read and/or write memory objects that are media surfaces. Note |
| that OpenCL memory objects may be created from the adapter media surface if and only if |
| the OpenCL context has been created from that adapter. |
| </para> |
| |
| <para> |
| If this extension is supported by an implementation, |
| the string "cl_khr_dx9_media_sharing" will be present in the |
| <constant>CL_PLATFORM_EXTENSIONS</constant> |
| (see <citerefentry><refentrytitle>clGetPlatformInfo</refentrytitle></citerefentry>) |
| or <constant>CL_DEVICE_EXTENSIONS</constant> |
| (see <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>). |
| </para> |
| |
| <para> |
| As currently proposed the interfaces for this |
| extension would be provided in <code>cl_dx9_media_sharing.h</code>. |
| </para> |
| |
| <bridgehead>Surface formats for Media Surface Sharing</bridgehead> |
| |
| <para> |
| <!-- ext. spec 9.9.7.5 Surface formats for Media Surface Sharing --> |
| This section includes the D3D surface formats |
| that are supported when the adapter type is one of the Direct 3D lineage. Using a D3D |
| surface format not listed here is an error. To extend the use of this extension to support |
| media adapters beyond DirectX9 tables similar to the ones in this section will need to be |
| defined for the surface formats supported by the new media adapter. All implementations |
| that support this extension are required to support the NV12 surface format, the other |
| surface formats supported are the same surface formats that the adapter you are sharing |
| with supports as long as they are listed in the two tables below (Tables 9.10.3 and 9.10.4). |
| </para> |
| |
| <!-- Table 9.10.3 --> |
| <informaltable frame="all"> |
| <tgroup cols="2" align="center" colsep="1" rowsep="1"> |
| <colspec colname="col1" colnum="1" /> |
| <colspec colname="col2" colnum="2" /> |
| <thead> |
| <row> |
| <entry>FOUR CC code</entry> |
| <entry>CL image format (channel order, channel data type)</entry> |
| </row> |
| </thead> |
| |
| <tbody> |
| <row> |
| <entry>FOURCC('N', 'V', '1', '2'), Plane 0</entry> |
| <entry><constant>CL_R, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>FOURCC('N', 'V', '1', '2'), Plane 1</entry> |
| <entry><constant>CL_RG, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>FOURCC('Y', 'V', '1', '2'), Plane 0</entry> |
| <entry><constant>CL_R, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>FOURCC('Y', 'V', '1', '2'), Plane 1</entry> |
| <entry><constant>CL_R, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>FOURCC('Y', 'V', '1', '2'), Plane 2</entry> |
| <entry><constant>CL_R, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| </tbody> |
| </tgroup> |
| </informaltable> |
| |
| <para> |
| In the table above, NV12 Plane 0 corresponds to the luminance (Y) channel and Plane 1 |
| corresponds to the UV channels. The YV12 Plane 0 corresponds to the Y channel, Plane |
| 1 to the U channel and Plane 2 to the V channel. Note that the YUV formats map to |
| <constant>CL_R</constant> and <constant>CL_RG</constant> but do not perform any YUV to |
| RGB conversion and vice-versa. |
| </para> |
| |
| <!-- Table 9.10.4 --> |
| <informaltable frame="all"> |
| <tgroup cols="2" align="center" colsep="1" rowsep="1"> |
| <colspec colname="col1" colnum="1" /> |
| <colspec colname="col2" colnum="2" /> |
| <thead> |
| <row> |
| <entry>D3D format</entry> |
| <entry>CL image format (channel order, channel data type)</entry> |
| </row> |
| </thead> |
| |
| <tbody> |
| <row> |
| <entry>D3DFMT_R32F</entry> |
| <entry><constant>CL_R, CL_FLOAT</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_R16F</entry> |
| <entry><constant>CL_R, CL_HALF_FLOAT</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_L16</entry> |
| <entry><constant>CL_R, CL_UNORM_INT16</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_A8</entry> |
| <entry><constant>CL_A, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_L8</entry> |
| <entry><constant>CL_R, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_G32R32F</entry> |
| <entry><constant>CL_RG, CL_FLOAT</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_G16R16F</entry> |
| <entry><constant>CL_RG, CL_HALF_FLOAT</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_G16R16</entry> |
| <entry><constant>CL_RG, CL_UNORM_INT16</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_A8L8</entry> |
| <entry><constant>CL_RG, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_A32B32G32R32F</entry> |
| <entry><constant>CL_RGBA, CL_FLOAT</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_A16B16G16R16F</entry> |
| <entry><constant>CL_RGBA, CL_HALF_FLOAT</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_A16B16G16R16</entry> |
| <entry><constant>CL_RGBA, CL_UNORM_INT16</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_A8B8G8R8</entry> |
| <entry><constant>CL_RGBA, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_X8B8G8R8</entry> |
| <entry><constant>CL_RGBA, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_A8R8G8B8</entry> |
| <entry><constant>CL_BGRA, CL_UNORM_INT8</constant></entry> |
| </row> |
| |
| <row> |
| <entry>D3DFMT_X8R8G8B8</entry> |
| <entry><constant>CL_BGRA, CL_UNORM_INT8</constant></entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </informaltable> |
| |
| <para> |
| Note that D3D9 format names seem to imply that the order of the color channels are switched |
| relative to OpenCL but this is not the case. For example, layout of channels for each pixel |
| for <constant>D3DFMT_A32FB32FG32FR32F</constant> is the same as |
| <constant>CL_RGBA</constant>, <constant>CL_FLOAT</constant>. |
| </para> |
| |
| <para> |
| Properties of media surface objects may be queried using |
| <citerefentry><refentrytitle>clGetMemObjectInfo</refentrytitle></citerefentry> |
| and <citerefentry><refentrytitle>clGetImageInfo</refentrytitle></citerefentry> with |
| <varname>param_name</varname> <constant>CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR</constant>, |
| <constant>CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR</constant> and |
| <constant>CL_IMAGE_DX9_MEDIA_SURFACE_PLANE_KHR</constant>. |
| </para> |
| |
| <!-- 25-Dec-2013, rev. 19 --> |
| |