//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Creates a new <see cref="ComputeContext"/> on all the <see cref="ComputeDevice"/>s that match /// the specified <see cref="ComputeDeviceTypes"/>. /// </summary> /// /// <param name="deviceType"> A bit-field that identifies the type of /// <see cref="ComputeDevice"/> to associate with the /// <see cref="ComputeContext"/>. </param> /// <param name="properties"> A <see cref="ComputeContextPropertyList"/> of the /// <see cref="ComputeContext"/>. </param> /// <param name="notify"> A delegate instance that refers to a notification routine. This /// routine is a callback function that will be used by the OpenCL /// implementation to report information on errors that occur in the /// <see cref="ComputeContext"/>. The callback function may be called /// asynchronously by the OpenCL implementation. It is the /// application's responsibility to ensure that the callback function /// is thread-safe and that the delegate instance doesn't get /// collected by the Garbage Collector until /// <see cref="ComputeContext"/> is disposed. If /// <paramref name="notify"/> is <c>null</c>, no callback function is /// registered. </param> /// <param name="userDataPtr"> Optional user data that will be passed to /// <paramref name="notify"/>. </param> //////////////////////////////////////////////////////////////////////////////////////////////////// public ComputeContext(ComputeDeviceTypes deviceType, ComputeContextPropertyList properties, ComputeContextNotifier notify, IntPtr userDataPtr) { IntPtr[] propertyArray = properties?.ToIntPtrArray(); callback = notify; Handle = CL12.CreateContextFromType(propertyArray, deviceType, notify, userDataPtr, out var error); ComputeException.ThrowOnError(error); SetID(Handle.Value); this.properties = properties; ComputeContextProperty platformProperty = properties.GetByName(ComputeContextPropertyName.Platform); platform = ComputePlatform.GetByHandle(platformProperty.Value); devices = GetDevices(); RILogManager.Default?.SendTrace("Create " + this + " in Thread(" + Thread.CurrentThread.ManagedThreadId + ").", "Information"); }
/// <summary> /// Creates a new <see cref="ComputeContext"/> on all the <see cref="ComputeDevice"/>s that match the specified <see cref="ComputeDeviceTypes"/>. /// </summary> /// <param name="deviceType"> A bit-field that identifies the type of <see cref="ComputeDevice"/> to associate with the <see cref="ComputeContext"/>. </param> /// <param name="properties"> A <see cref="ComputeContextPropertyList"/> of the <see cref="ComputeContext"/>. </param> /// <param name="notify"> A delegate instance that refers to a notification routine. This routine is a callback function that will be used by the OpenCL implementation to report information on errors that occur in the <see cref="ComputeContext"/>. The callback function may be called asynchronously by the OpenCL implementation. It is the application's responsibility to ensure that the callback function is thread-safe and that the delegate instance doesn't get collected by the Garbage Collector until <see cref="ComputeContext"/> is disposed. If <paramref name="notify"/> is <c>null</c>, no callback function is registered. </param> /// <param name="userDataPtr"> Optional user data that will be passed to <paramref name="notify"/>. </param> public ComputeContext(ComputeDeviceTypes deviceType, ComputeContextPropertyList properties, ComputeContextNotifier notify, IntPtr userDataPtr) { IntPtr[] propertyArray = (properties != null) ? properties.ToIntPtrArray() : null; callback = notify; ComputeErrorCode error = ComputeErrorCode.Success; Handle = CL12.CreateContextFromType(propertyArray, deviceType, notify, userDataPtr, out error); ComputeException.ThrowOnError(error); SetID(Handle.Value); this.properties = properties; ComputeContextProperty platformProperty = properties.GetByName(ComputeContextPropertyName.Platform); this.platform = ComputePlatform.GetByHandle(platformProperty.Value); this.devices = GetDevices(); Trace.WriteLine("Create " + this + " in Thread(" + Thread.CurrentThread.ManagedThreadId + ").", "Information"); }