blob: e07cf557a924c857945771af14f4aae35f5624d8 [file] [log] [blame]
Name String
cl_intel_simultaneous_sharing
Contributors
Krzysztof Laskowski, Intel
Bartosz Sochacki, Intel
Eric L Palmer, Intel
Ben Ashbaugh, Intel
Adam T Lake, Intel
Contact
Krzysztof Laskowski, Intel (krzysztof.laskowski 'at' intel.com)
Version
Version 7, October 14, 2014
Number
OpenCL Extension #34
Status
Complete
Extension Type
OpenCL platform extension
Dependencies
OpenCL 1.2. This extension is written against revision 19 of the
OpenCL 1.2 Specification and revision 19 of the OpenCL 1.2 Extension
Specification.
Overview
Currently OpenCL 1.2 Extension Spec forbids to specify interoperability
with multiple graphics APIs at clCreateContext or clCreateContextFromType
time and defines that CL_INVALID_OPERATION should be returned in such
cases as noted e.g. in chapters dedicated to sharing memory objects with
Direct3D 10 and Direct3D 11.
The goal of this extension is to relax the restrictions and allow to
specify simultaneously these combinations of interoperabilities that are
supported by a given OpenCL device.
New Tokens
Accepted as a property being queried in the <param_name> parameter
of clGetDeviceInfo:
CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL 0x4104
CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL 0x4105
Additions to chapter 4 of the OpenCL 1.2 Specification
4.2 Querying Devices
Extend table 4.3 to include the following entry:
--------------------------------------------------------------------------
cl_device_info Return Type Description
-------------- ----------- -----------
CL_DEVICE_NUM_SIMULTANEOUS cl_uint Number of supported combinations
_INTEROPS_INTEL of graphics API interoperabilities
that can be enabled simultaneously
within the same context.
The minimum value is 1.
CL_DEVICE_SIMULTANEOUS cl_uint[] List of <n> combinations of context
_INTEROPS_INTEL property names describing graphic APIs
that the device can interoperate with
simultaneously by specifying the
combination in the <properties>
parameter of clCreateContext and
clCreateContextFromType.
Each combination is a set of 2
or more property names and is
terminated with zero.
<n> is the value returned by the
query for
CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL.
--------------------------------------------------------------------------
4.4 Contexts
Add to the list of errors for clCreateContext:
"CL_INVALID_OPERATION if a combination of interoperabilities with multiple graphics
APIs is specified which is not on the list of valid combinations returned by
the query for CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL."
Add to the list of errors for clCreateContextFromType the same new errors
described above for clCreateContext.
Additions to section 9.6.4 of the OpenCL 1.2 Extension Specification
Replace the section about CL_CONTEXT_INTEROP_USER_SYNC property support with:
"OpenCL / OpenGL sharing does not support the CL_CONTEXT_INTEROP_USER_SYNC property
defined in table 4.5. Specifying this property when creating a context with OpenCL /
OpenGL sharing will return an appropriate error or be ignored for OpenGL sharing if
sharing with another graphics API supporting the CL_CONTEXT_INTEROP_USER_SYNC
property is also specified."
Replace the description of CL_INVALID_PROPERTY error code with:
"errcode_ret returns CL_INVALID_PROPERTY if an attribute name other than those
specified in table 4.5 or if CL_CONTEXT_INTEROP_USER_SYNC is specified in properties
and there is no graphics API interoperability specified that supports it."
Additions to section 9.9.5 of the OpenCL 1.2 Extension Specification
Remove the following description of CL_INVALID_PROPERTY error code:
"CL_INVALID_OPERATION if Direct3D 10 interoperability is specified by setting
CL_INVALID_D3D10_DEVICE_KHR to a non-NULL value, and interoperability with another
graphics API is also specified."
Additions to section 9.11.5 of the OpenCL 1.2 Extension Specification
Remove the following description of CL_INVALID_PROPERTY error code:
"CL_INVALID_OPERATION if Direct3D 11 interoperability is specified by setting
CL_INVALID_D3D11_DEVICE_KHR to a non-NULL value, and interoperability with another
graphics API is also specified."
Additions to cl_intel_dx9_media_sharing extension specification:
Remove the following description of CL_INVALID_PROPERTY error code:
"CL_INVALID_OPERATION if DirectX 9 interoperability is specified by setting
CL_CONTEXT_D3D9_DEVICE_INTEL, CL_CONTEXT_D3D9EX_DEVICE_INTEL, or
CL_CONTEXT_DXVA_DEVICE_INTEL to a non-NULL value, and interoperability with any
other graphics API is also specified."
Example Usage
cl_uint SimInteropsNum;
cl_uint* SimInterops;
size_t SimInteropsSize;
clGetDeviceInfo( deviceID,
CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL,
sizeof( SimInteropsNum ),
&SimInteropsNum,
NULL );
clGetDeviceInfo( deviceID,
CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL,
0,
NULL,
&SimInteropsSize );
SimInterops = new cl_uint[ SimInteropsSize / sizeof( cl_uint ) ];
clGetDeviceInfo( deviceID,
CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL,
SimInteropsSize,
SimInterops,
NULL );
bool SimInteropsCheck[] = { false, false, false };
bool GLD3D11SimInteropSupported = false;
cl_uint property = 0;
for( int i = 0; i < SimInteropsNum; i++ )
{
SimInteropsCheck[0] = false;
SimInteropsCheck[1] = false;
SimInteropsCheck[2] = false;
do
{
property = *SimInterops++;
if( property == CL_GL_CONTEXT_KHR )
SimInteropsCheck[0] = true;
if( property == CL_WGL_HDC_KHR )
SimInteropsCheck[1] = true;
if( property == CL_CONTEXT_D3D11_DEVICE_KHR )
SimInteropsCheck[2] = true;
}
while( property != 0 );
if( SimInteropsCheck[0] && SimInteropsCheck[1] && SimInteropsCheck[2] )
{
GLD3D11SimInteropSupported = true;
printf("This device supports GL and D3D11 simultaneous sharing.\n");
break;
}
}
if( !GLD3D11SimInteropSupported )
{
printf("This device doesn't support GL and D3D11 simultaneous sharing.\n");
}
Issues
- It might be good to enumerate changes to all chapters talking about sharing
with each graphics API. However this is troublesome because the restriction
for the interops being mutually exclusive is not consistent throughout specs.
The restriction exists in chapters about sharing with Direct3D 10, Direct3D 11
and DX9 Media Intel vendor extension but is not explicitly stated in chapters
about sharing with OpenGL and DX9 Media KHR extension.
RESOLVED: Added description of all changes explicitly.
Revision History
Version 1, 2014/07/28 (Krzysztof Laskowski) - Initial version.
Version 2, 2014/07/29 (Krzysztof Laskowski) - Changed minimum value of
CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL
to 1.
Added section about usage of
CL_CONTEXT_INTEROP_USER_SYNC.
Version 3, 2014/09/29 (Krzysztof Laskowski) - Added numerical values for the new tokens.
Version 4, 2014/10/02 (Krzysztof Laskowski) - Rephrased the description of CL_DEVICE
_SIMULTANEOUS_INTEROPS_INTEL.
Version 5, 2014/10/06 (Krzysztof Laskowski) - Added description of changes
to OpenGL, D3D10, D3D11 and Intel DX9
Media sharing specifications.
Removed redundant paragraphs from
the description of CL_DEVICE_SIMULTANEOUS_
INTEROPS_INTEL.
Version 6, 2014/10/09 (Krzysztof Laskowski) - Added Example Usage section.
Version 7, 2014/10/14 (Krzysztof Laskowski) - Moved Issues section to the bottom.
Marked as complete.