-- This file was automatically generated.
{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Raw.Extension.INTEL.PerformanceQuery (
  -- * Extension Support
    gl_INTEL_performance_query

  -- * GL_INTEL_performance_query
  , glBeginPerfQueryINTEL
  , glCreatePerfQueryINTEL
  , glDeletePerfQueryINTEL
  , glEndPerfQueryINTEL
  , glGetFirstPerfQueryIdINTEL
  , glGetNextPerfQueryIdINTEL
  , glGetPerfCounterInfoINTEL
  , glGetPerfQueryDataINTEL
  , glGetPerfQueryIdByNameINTEL
  , glGetPerfQueryInfoINTEL
  , pattern GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL
  , pattern GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL
  , pattern GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL
  , pattern GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL
  , pattern GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL
  , pattern GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL
  , pattern GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL
  , pattern GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL
  , pattern GL_PERFQUERY_COUNTER_EVENT_INTEL
  , pattern GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL
  , pattern GL_PERFQUERY_COUNTER_RAW_INTEL
  , pattern GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL
  , pattern GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL
  , pattern GL_PERFQUERY_DONOT_FLUSH_INTEL
  , pattern GL_PERFQUERY_FLUSH_INTEL
  , pattern GL_PERFQUERY_GLOBAL_CONTEXT_INTEL
  , pattern GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL
  , pattern GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL
  , pattern GL_PERFQUERY_SINGLE_CONTEXT_INTEL
  , pattern GL_PERFQUERY_WAIT_INTEL
) where

import Control.Monad.IO.Class
import Data.Set
import Foreign.Ptr
import Graphics.GL.Raw.Internal.FFI
import Graphics.GL.Raw.Internal.Proc
import Graphics.GL.Raw.Types
import System.IO.Unsafe

gl_INTEL_performance_query :: Bool
gl_INTEL_performance_query = member "GL_INTEL_performance_query" extensions

glBeginPerfQueryINTEL :: MonadIO m => GLuint -> m ()
glBeginPerfQueryINTEL = ffiuintIOV glBeginPerfQueryINTELFunPtr

glBeginPerfQueryINTELFunPtr :: FunPtr (GLuint -> IO ())
glBeginPerfQueryINTELFunPtr = unsafePerformIO (getProcAddress "glBeginPerfQueryINTEL")

{-# NOINLINE glBeginPerfQueryINTELFunPtr #-}

glCreatePerfQueryINTEL :: MonadIO m => GLuint -> Ptr GLuint -> m ()
glCreatePerfQueryINTEL = ffiuintPtruintIOV glCreatePerfQueryINTELFunPtr

glCreatePerfQueryINTELFunPtr :: FunPtr (GLuint -> Ptr GLuint -> IO ())
glCreatePerfQueryINTELFunPtr = unsafePerformIO (getProcAddress "glCreatePerfQueryINTEL")

{-# NOINLINE glCreatePerfQueryINTELFunPtr #-}

glDeletePerfQueryINTEL :: MonadIO m => GLuint -> m ()
glDeletePerfQueryINTEL = ffiuintIOV glDeletePerfQueryINTELFunPtr

glDeletePerfQueryINTELFunPtr :: FunPtr (GLuint -> IO ())
glDeletePerfQueryINTELFunPtr = unsafePerformIO (getProcAddress "glDeletePerfQueryINTEL")

{-# NOINLINE glDeletePerfQueryINTELFunPtr #-}

glEndPerfQueryINTEL :: MonadIO m => GLuint -> m ()
glEndPerfQueryINTEL = ffiuintIOV glEndPerfQueryINTELFunPtr

glEndPerfQueryINTELFunPtr :: FunPtr (GLuint -> IO ())
glEndPerfQueryINTELFunPtr = unsafePerformIO (getProcAddress "glEndPerfQueryINTEL")

{-# NOINLINE glEndPerfQueryINTELFunPtr #-}

glGetFirstPerfQueryIdINTEL :: MonadIO m => Ptr GLuint -> m ()
glGetFirstPerfQueryIdINTEL = ffiPtruintIOV glGetFirstPerfQueryIdINTELFunPtr

glGetFirstPerfQueryIdINTELFunPtr :: FunPtr (Ptr GLuint -> IO ())
glGetFirstPerfQueryIdINTELFunPtr = unsafePerformIO (getProcAddress "glGetFirstPerfQueryIdINTEL")

{-# NOINLINE glGetFirstPerfQueryIdINTELFunPtr #-}

glGetNextPerfQueryIdINTEL :: MonadIO m => GLuint -> Ptr GLuint -> m ()
glGetNextPerfQueryIdINTEL = ffiuintPtruintIOV glGetNextPerfQueryIdINTELFunPtr

glGetNextPerfQueryIdINTELFunPtr :: FunPtr (GLuint -> Ptr GLuint -> IO ())
glGetNextPerfQueryIdINTELFunPtr = unsafePerformIO (getProcAddress "glGetNextPerfQueryIdINTEL")

{-# NOINLINE glGetNextPerfQueryIdINTELFunPtr #-}

glGetPerfCounterInfoINTEL :: MonadIO m => GLuint -> GLuint -> GLuint -> Ptr GLchar -> GLuint -> Ptr GLchar -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint64 -> m ()
glGetPerfCounterInfoINTEL = ffiuintuintuintPtrcharuintPtrcharPtruintPtruintPtruintPtruintPtruint64IOV glGetPerfCounterInfoINTELFunPtr

glGetPerfCounterInfoINTELFunPtr :: FunPtr (GLuint -> GLuint -> GLuint -> Ptr GLchar -> GLuint -> Ptr GLchar -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint64 -> IO ())
glGetPerfCounterInfoINTELFunPtr = unsafePerformIO (getProcAddress "glGetPerfCounterInfoINTEL")

{-# NOINLINE glGetPerfCounterInfoINTELFunPtr #-}

glGetPerfQueryDataINTEL :: MonadIO m => GLuint -> GLuint -> GLsizei -> Ptr () -> Ptr GLuint -> m ()
glGetPerfQueryDataINTEL = ffiuintuintsizeiPtrVPtruintIOV glGetPerfQueryDataINTELFunPtr

glGetPerfQueryDataINTELFunPtr :: FunPtr (GLuint -> GLuint -> GLsizei -> Ptr () -> Ptr GLuint -> IO ())
glGetPerfQueryDataINTELFunPtr = unsafePerformIO (getProcAddress "glGetPerfQueryDataINTEL")

{-# NOINLINE glGetPerfQueryDataINTELFunPtr #-}

glGetPerfQueryIdByNameINTEL :: MonadIO m => Ptr GLchar -> Ptr GLuint -> m ()
glGetPerfQueryIdByNameINTEL = ffiPtrcharPtruintIOV glGetPerfQueryIdByNameINTELFunPtr

glGetPerfQueryIdByNameINTELFunPtr :: FunPtr (Ptr GLchar -> Ptr GLuint -> IO ())
glGetPerfQueryIdByNameINTELFunPtr = unsafePerformIO (getProcAddress "glGetPerfQueryIdByNameINTEL")

{-# NOINLINE glGetPerfQueryIdByNameINTELFunPtr #-}

glGetPerfQueryInfoINTEL :: MonadIO m => GLuint -> GLuint -> Ptr GLchar -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> m ()
glGetPerfQueryInfoINTEL = ffiuintuintPtrcharPtruintPtruintPtruintPtruintIOV glGetPerfQueryInfoINTELFunPtr

glGetPerfQueryInfoINTELFunPtr :: FunPtr (GLuint -> GLuint -> Ptr GLchar -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> Ptr GLuint -> IO ())
glGetPerfQueryInfoINTELFunPtr = unsafePerformIO (getProcAddress "glGetPerfQueryInfoINTEL")

{-# NOINLINE glGetPerfQueryInfoINTELFunPtr #-}

pattern GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL = 0x94FC

pattern GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL = 0x94FB

pattern GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL = 0x94FA

pattern GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL = 0x94F8

pattern GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL = 0x94F9

pattern GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL = 0x94FF

pattern GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL = 0x94F1

pattern GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL = 0x94F2

pattern GL_PERFQUERY_COUNTER_EVENT_INTEL = 0x94F0

pattern GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL = 0x94FE

pattern GL_PERFQUERY_COUNTER_RAW_INTEL = 0x94F4

pattern GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL = 0x94F3

pattern GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL = 0x94F5

pattern GL_PERFQUERY_DONOT_FLUSH_INTEL = 0x83F9

pattern GL_PERFQUERY_FLUSH_INTEL = 0x83FA

pattern GL_PERFQUERY_GLOBAL_CONTEXT_INTEL = 0x00000001

pattern GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL = 0x9500

pattern GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL = 0x94FD

pattern GL_PERFQUERY_SINGLE_CONTEXT_INTEL = 0x00000000

pattern GL_PERFQUERY_WAIT_INTEL = 0x83FB