| 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. |
| |
| |