/// <summary>
 /// Creates a new DX-interop accelerator.
 /// </summary>
 /// <param name="accelerator">The source accelerator.</param>
 /// <param name="d3dDevice">The target DX device.</param>
 /// <returns>The created DX-interop accelerator.</returns>
 public static DirectXInteropAccelerator CreateDirectXInteropAccelerator(
     this Accelerator accelerator,
     Device d3dDevice)
 {
     if (d3dDevice == null)
     {
         throw new ArgumentNullException(nameof(d3dDevice));
     }
     return(accelerator.CreateExtension <DirectXInteropAccelerator, ExtensionProvider>(
                new ExtensionProvider(d3dDevice)));
 }
 /// <summary>
 /// Creates a new provider key-value-pair-sorting implementation for radix sort.
 /// </summary>
 /// <param name="accelerator">The accelerator.</param>
 /// <returns>The created scan provider.</returns>
 internal static RadixSortPairsProviderImplementation CreateRadixSortPairsProviderImplementation(
     this Accelerator accelerator)
 {
     return(accelerator.CreateExtension <RadixSortPairsProviderImplementation, RadixSortPairsExtension>(
                new RadixSortPairsExtension()));
 }
 /// <summary>
 /// Creates a new provider implementation for scan.
 /// </summary>
 /// <param name="accelerator">The accelerator.</param>
 /// <returns>The created provider.</returns>
 internal static ScanProviderImplementation CreateScanProviderImplementation(this Accelerator accelerator)
 {
     return(accelerator.CreateExtension <ScanProviderImplementation, ScanExtension>(
                new ScanExtension()));
 }