 type BuildCallback = CLProgram -> Ptr () -> IO ()
 foreign import ccall "clCreateProgramWithSource" raw_clCreateProgramWithSource :: 
   CLContext -> CLuint -> Ptr CString -> Ptr CSize -> Ptr CLint -> IO CLProgram
-foreign import ccall "clCreateProgramWithBinary" raw_clCreateProgramWithBinary :: 
-  CLContext -> CLuint -> Ptr CLDeviceID -> Ptr CSize -> Ptr (Ptr Word8) -> Ptr CLint -> Ptr CLint -> IO CLProgram
+--foreign import ccall "clCreateProgramWithBinary" raw_clCreateProgramWithBinary :: 
+--  CLContext -> CLuint -> Ptr CLDeviceID -> Ptr CSize -> Ptr (Ptr Word8) -> Ptr CLint -> Ptr CLint -> IO CLProgram
 foreign import ccall "clRetainProgram" raw_clRetainProgram :: 
   CLProgram -> IO CLint
 foreign import ccall "clReleaseProgram" raw_clReleaseProgram :: 


This option is ignored for single precision numbers if the device does not
support single precision denormalized numbers i.e. 'CL_FP_DENORM' bit is not set
in 'CL_DEVICE_SINGLE_FP_CONFIG'.

This option is ignored for double precision numbers if the device does not
support double precision or if it does support double precison but
'CL_FP_DENORM' bit is not set in 'CL_DEVICE_DOUBLE_FP_CONFIG'.

This flag only applies for scalar and vector single precision floating-point
variables and computations on these floating-point variables inside a

{-# LANGUAGE ForeignFunctionInterface, ScopedTypeVariables #-}
module System.GPU.OpenCL.Program(  
  -- * Types
  CLProgram, CLBuildStatus(..),
  -- * Functions
  clCreateProgramWithSource, clRetainProgram, clReleaseProgram, 
  clUnloadCompiler, clBuildProgram, clGetProgramReferenceCount, 
  clGetProgramContext, clGetProgramNumDevices, clGetProgramDevices,
  clGetProgramSource, clGetProgramBinarySizes, clGetProgramBinaries, 
  clGetProgramBuildStatus, clGetProgramBuildOptions, clGetProgramBuildLog
  ) where

-- -----------------------------------------------------------------------------
import Foreign
import Foreign.C.Types
import Foreign.C.String( CString, withCString, newCString, peekCString )
import System.GPU.OpenCL.Types( 
  CLint, CLuint, CLProgram, CLContext, CLDeviceID, CLError(..), CLProgramInfo_,
  CLBuildStatus(..), CLBuildStatus_, wrapCheckSuccess, wrapPError, wrapGetInfo, 
  getCLValue, getEnumCL )

#include <CL/cl.h>

