private void SetupKernel(string programText)
        {
            //Abort if Command Queue is not ready
            if ((status & Status.CommandQueueNotReady) == Status.CommandQueueNotReady)
            {
                return;
            }

            //Load kernel
            using (Program program = ClContextManager.BuildProgram(context, device, programText, out error))
            {
                if (IsErrorOccurred())
                {
                    return;
                }

                AddKernel(program);
            }

            //Kernel is ready
            if (!IsErrorOccurred())
            {
                status ^= Status.KernelNotReady;
            }
        }
        private void SetupContext()
        {
            //Abort if device is not ready
            if ((status & Status.DeviceNotReady) == Status.DeviceNotReady)
            {
                return;
            }

            //Create context
            context = ClContextManager.CreateContext(device, out error);

            //Context is ready
            if (!IsErrorOccurred())
            {
                status ^= Status.ContextNotReady;
            }
        }
        private void SetupCommandQueue()
        {
            //Abort if context is not ready
            if ((status & Status.ContextNotReady) == Status.ContextNotReady)
            {
                return;
            }

            //Create Command Queue
            commandQueue = ClContextManager.CreateCommandQueue(context, device, out error);

            //Command Queue is ready
            if (!IsErrorOccurred())
            {
                status ^= Status.CommandQueueNotReady;
            }
        }