module Graphics.XHB.Gen.XF86Dri
       (extension, queryVersion, queryDirectRenderingCapable,
        openConnection, closeConnection, getClientDriverName,
        createContext, destroyContext, createDrawable, destroyDrawable,
        getDrawableInfo, getDeviceInfo, authConnection,
        module Graphics.XHB.Gen.XF86Dri.Types)
       where
import Graphics.XHB.Gen.XF86Dri.Types
import Graphics.XHB.Connection.Internal
import Graphics.XHB.Connection.Extension
import Graphics.XHB.Connection.Types
import Control.Concurrent.STM
import Foreign.C.Types
import Data.Binary.Put (runPut)
import Graphics.XHB.Shared hiding (Event(..), Error(..))
 
extension :: ExtensionId
extension = "XFree86-DRI"
 
queryVersion ::
               Graphics.XHB.Connection.Types.Connection ->
                 IO (Receipt QueryVersionReply)
queryVersion c
  = do receipt <- newEmptyReceiptIO
       let req = MkQueryVersion
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
queryDirectRenderingCapable ::
                              Graphics.XHB.Connection.Types.Connection ->
                                CARD32 -> IO (Receipt QueryDirectRenderingCapableReply)
queryDirectRenderingCapable c screen
  = do receipt <- newEmptyReceiptIO
       let req = MkQueryDirectRenderingCapable screen
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
openConnection ::
                 Graphics.XHB.Connection.Types.Connection ->
                   CARD32 -> IO (Receipt OpenConnectionReply)
openConnection c screen
  = do receipt <- newEmptyReceiptIO
       let req = MkOpenConnection screen
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
closeConnection ::
                  Graphics.XHB.Connection.Types.Connection -> CARD32 -> IO ()
closeConnection c screen
  = do let req = MkCloseConnection screen
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
getClientDriverName ::
                      Graphics.XHB.Connection.Types.Connection ->
                        CARD32 -> IO (Receipt GetClientDriverNameReply)
getClientDriverName c screen
  = do receipt <- newEmptyReceiptIO
       let req = MkGetClientDriverName screen
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
createContext ::
                Graphics.XHB.Connection.Types.Connection ->
                  CreateContext -> IO (Receipt CreateContextReply)
createContext c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
destroyContext ::
                 Graphics.XHB.Connection.Types.Connection ->
                   CARD32 -> CARD32 -> IO ()
destroyContext c screen context
  = do let req = MkDestroyContext screen context
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
createDrawable ::
                 Graphics.XHB.Connection.Types.Connection ->
                   CARD32 -> CARD32 -> IO (Receipt CreateDrawableReply)
createDrawable c screen drawable
  = do receipt <- newEmptyReceiptIO
       let req = MkCreateDrawable screen drawable
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
destroyDrawable ::
                  Graphics.XHB.Connection.Types.Connection ->
                    CARD32 -> CARD32 -> IO ()
destroyDrawable c screen drawable
  = do let req = MkDestroyDrawable screen drawable
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
getDrawableInfo ::
                  Graphics.XHB.Connection.Types.Connection ->
                    CARD32 -> CARD32 -> IO (Receipt GetDrawableInfoReply)
getDrawableInfo c screen drawable
  = do receipt <- newEmptyReceiptIO
       let req = MkGetDrawableInfo screen drawable
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
getDeviceInfo ::
                Graphics.XHB.Connection.Types.Connection ->
                  CARD32 -> IO (Receipt GetDeviceInfoReply)
getDeviceInfo c screen
  = do receipt <- newEmptyReceiptIO
       let req = MkGetDeviceInfo screen
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
authConnection ::
                 Graphics.XHB.Connection.Types.Connection ->
                   CARD32 -> CARD32 -> IO (Receipt AuthConnectionReply)
authConnection c screen magic
  = do receipt <- newEmptyReceiptIO
       let req = MkAuthConnection screen magic
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt