diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,15 @@
+0.6.1
+-----
+* Added support for eight new extensions:
+  * EXT_base_instance
+  * EXT_draw_elements_base_vertex
+  * EXT_multi_draw_indirect
+  * EXT_render_snorm
+  * EXT_render_norm16
+  * NV_image_formats
+  * NV_shader_noperspective_interpolation
+  * NV_viewport_array
+
 0.6
 ---
 * Stopped exporting all extensions from `Graphics.GL`. You'll need to import `Graphics.GL.Ext` as well.
diff --git a/dist/build/autogen/Graphics/GL/Ext/EXT.hs b/dist/build/autogen/Graphics/GL/Ext/EXT.hs
--- a/dist/build/autogen/Graphics/GL/Ext/EXT.hs
+++ b/dist/build/autogen/Graphics/GL/Ext/EXT.hs
@@ -3,6 +3,7 @@
 module Graphics.GL.Ext.EXT (
   -- * EXT Extensions
     module Graphics.GL.Ext.EXT.Abgr
+  , module Graphics.GL.Ext.EXT.BaseInstance
   , module Graphics.GL.Ext.EXT.Bgra
   , module Graphics.GL.Ext.EXT.BindableUniform
   , module Graphics.GL.Ext.EXT.BlendColor
@@ -30,6 +31,7 @@
   , module Graphics.GL.Ext.EXT.DrawBuffers
   , module Graphics.GL.Ext.EXT.DrawBuffers2
   , module Graphics.GL.Ext.EXT.DrawBuffersIndexed
+  , module Graphics.GL.Ext.EXT.DrawElementsBaseVertex
   , module Graphics.GL.Ext.EXT.DrawInstanced
   , module Graphics.GL.Ext.EXT.DrawRangeElements
   , module Graphics.GL.Ext.EXT.FogCoord
@@ -55,6 +57,7 @@
   , module Graphics.GL.Ext.EXT.MapBufferRange
   , module Graphics.GL.Ext.EXT.MiscAttribute
   , module Graphics.GL.Ext.EXT.MultiDrawArrays
+  , module Graphics.GL.Ext.EXT.MultiDrawIndirect
   , module Graphics.GL.Ext.EXT.Multisample
   , module Graphics.GL.Ext.EXT.MultisampledRenderToTexture
   , module Graphics.GL.Ext.EXT.MultiviewDrawBuffers
@@ -75,6 +78,7 @@
   , module Graphics.GL.Ext.EXT.PvrtcSRGB
   , module Graphics.GL.Ext.EXT.RasterMultisample
   , module Graphics.GL.Ext.EXT.ReadFormatBgra
+  , module Graphics.GL.Ext.EXT.RenderSnorm
   , module Graphics.GL.Ext.EXT.RescaleNormal
   , module Graphics.GL.Ext.EXT.Robustness
   , module Graphics.GL.Ext.EXT.SRGB
@@ -121,6 +125,7 @@
   , module Graphics.GL.Ext.EXT.TextureInteger
   , module Graphics.GL.Ext.EXT.TextureLodBias
   , module Graphics.GL.Ext.EXT.TextureMirrorClamp
+  , module Graphics.GL.Ext.EXT.TextureNorm16
   , module Graphics.GL.Ext.EXT.TextureObject
   , module Graphics.GL.Ext.EXT.TexturePerturbNormal
   , module Graphics.GL.Ext.EXT.TextureRg
@@ -144,6 +149,7 @@
 ) where
 
 import Graphics.GL.Ext.EXT.Abgr
+import Graphics.GL.Ext.EXT.BaseInstance
 import Graphics.GL.Ext.EXT.Bgra
 import Graphics.GL.Ext.EXT.BindableUniform
 import Graphics.GL.Ext.EXT.BlendColor
@@ -171,6 +177,7 @@
 import Graphics.GL.Ext.EXT.DrawBuffers
 import Graphics.GL.Ext.EXT.DrawBuffers2
 import Graphics.GL.Ext.EXT.DrawBuffersIndexed
+import Graphics.GL.Ext.EXT.DrawElementsBaseVertex
 import Graphics.GL.Ext.EXT.DrawInstanced
 import Graphics.GL.Ext.EXT.DrawRangeElements
 import Graphics.GL.Ext.EXT.FogCoord
@@ -196,6 +203,7 @@
 import Graphics.GL.Ext.EXT.MapBufferRange
 import Graphics.GL.Ext.EXT.MiscAttribute
 import Graphics.GL.Ext.EXT.MultiDrawArrays
+import Graphics.GL.Ext.EXT.MultiDrawIndirect
 import Graphics.GL.Ext.EXT.Multisample
 import Graphics.GL.Ext.EXT.MultisampledRenderToTexture
 import Graphics.GL.Ext.EXT.MultiviewDrawBuffers
@@ -216,6 +224,7 @@
 import Graphics.GL.Ext.EXT.PvrtcSRGB
 import Graphics.GL.Ext.EXT.RasterMultisample
 import Graphics.GL.Ext.EXT.ReadFormatBgra
+import Graphics.GL.Ext.EXT.RenderSnorm
 import Graphics.GL.Ext.EXT.RescaleNormal
 import Graphics.GL.Ext.EXT.Robustness
 import Graphics.GL.Ext.EXT.SRGB
@@ -262,6 +271,7 @@
 import Graphics.GL.Ext.EXT.TextureInteger
 import Graphics.GL.Ext.EXT.TextureLodBias
 import Graphics.GL.Ext.EXT.TextureMirrorClamp
+import Graphics.GL.Ext.EXT.TextureNorm16
 import Graphics.GL.Ext.EXT.TextureObject
 import Graphics.GL.Ext.EXT.TexturePerturbNormal
 import Graphics.GL.Ext.EXT.TextureRg
diff --git a/dist/build/autogen/Graphics/GL/Ext/EXT/BaseInstance.hs b/dist/build/autogen/Graphics/GL/Ext/EXT/BaseInstance.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/EXT/BaseInstance.hs
@@ -0,0 +1,74 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.EXT.BaseInstance (
+  -- * Extension Support
+    gl_EXT_base_instance
+
+  -- * GL_EXT_base_instance
+  , glDrawArraysInstancedBaseInstanceEXT
+  , glDrawElementsInstancedBaseInstanceEXT
+  , glDrawElementsInstancedBaseVertexBaseInstanceEXT
+) where
+
+import Control.Monad.IO.Class
+import Data.Set
+import Foreign.Ptr
+import Graphics.GL.Internal.FFI
+import Graphics.GL.Internal.Proc
+import Graphics.GL.Types
+import System.IO.Unsafe
+
+-- | Checks that the GL_EXT_base_instance extension is available.
+
+gl_EXT_base_instance :: Bool
+gl_EXT_base_instance = member "GL_EXT_base_instance" extensions
+{-# NOINLINE gl_EXT_base_instance #-}
+
+-- | Usage: @'glDrawArraysInstancedBaseInstanceEXT' mode first count instancecount baseinstance@
+--
+-- The parameter @mode@ is a @PrimitiveType@, one of: 'Graphics.GL.Internal.Shared.GL_LINES', 'Graphics.GL.Core32.GL_LINES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_LINE_LOOP', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP', 'Graphics.GL.Core32.GL_LINE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_PATCHES', 'Graphics.GL.Ext.EXT.TessellationShader.GL_PATCHES_EXT', 'Graphics.GL.Internal.Shared.GL_POINTS', 'Graphics.GL.Internal.Shared.GL_POLYGON', 'Graphics.GL.Internal.Shared.GL_QUADS', 'Graphics.GL.Ext.EXT.TessellationShader.GL_QUADS_EXT', 'Graphics.GL.Internal.Shared.GL_QUAD_STRIP', 'Graphics.GL.Internal.Shared.GL_TRIANGLES', 'Graphics.GL.Core32.GL_TRIANGLES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_FAN', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP', 'Graphics.GL.Core32.GL_TRIANGLE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP_ADJACENCY_EXT'.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glDrawArraysInstancedBaseInstance'.
+
+
+glDrawArraysInstancedBaseInstanceEXT :: MonadIO m => GLenum -> GLint -> GLsizei -> GLsizei -> GLuint -> m ()
+glDrawArraysInstancedBaseInstanceEXT = ffienumintsizeisizeiuintIOV glDrawArraysInstancedBaseInstanceEXTFunPtr
+
+glDrawArraysInstancedBaseInstanceEXTFunPtr :: FunPtr (GLenum -> GLint -> GLsizei -> GLsizei -> GLuint -> IO ())
+glDrawArraysInstancedBaseInstanceEXTFunPtr = unsafePerformIO (getProcAddress "glDrawArraysInstancedBaseInstanceEXT")
+
+{-# NOINLINE glDrawArraysInstancedBaseInstanceEXTFunPtr #-}
+
+-- | Usage: @'glDrawElementsInstancedBaseInstanceEXT' mode count type indices instancecount baseinstance@
+--
+-- The parameter @mode@ is a @PrimitiveType@, one of: 'Graphics.GL.Internal.Shared.GL_LINES', 'Graphics.GL.Core32.GL_LINES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_LINE_LOOP', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP', 'Graphics.GL.Core32.GL_LINE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_PATCHES', 'Graphics.GL.Ext.EXT.TessellationShader.GL_PATCHES_EXT', 'Graphics.GL.Internal.Shared.GL_POINTS', 'Graphics.GL.Internal.Shared.GL_POLYGON', 'Graphics.GL.Internal.Shared.GL_QUADS', 'Graphics.GL.Ext.EXT.TessellationShader.GL_QUADS_EXT', 'Graphics.GL.Internal.Shared.GL_QUAD_STRIP', 'Graphics.GL.Internal.Shared.GL_TRIANGLES', 'Graphics.GL.Core32.GL_TRIANGLES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_FAN', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP', 'Graphics.GL.Core32.GL_TRIANGLE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP_ADJACENCY_EXT'.
+--
+-- The length of @indices@ should be @count@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glDrawElementsInstancedBaseInstance'.
+
+
+glDrawElementsInstancedBaseInstanceEXT :: MonadIO m => GLenum -> GLsizei -> GLenum -> Ptr () -> GLsizei -> GLuint -> m ()
+glDrawElementsInstancedBaseInstanceEXT = ffienumsizeienumPtrVsizeiuintIOV glDrawElementsInstancedBaseInstanceEXTFunPtr
+
+glDrawElementsInstancedBaseInstanceEXTFunPtr :: FunPtr (GLenum -> GLsizei -> GLenum -> Ptr () -> GLsizei -> GLuint -> IO ())
+glDrawElementsInstancedBaseInstanceEXTFunPtr = unsafePerformIO (getProcAddress "glDrawElementsInstancedBaseInstanceEXT")
+
+{-# NOINLINE glDrawElementsInstancedBaseInstanceEXTFunPtr #-}
+
+-- | Usage: @'glDrawElementsInstancedBaseVertexBaseInstanceEXT' mode count type indices instancecount basevertex baseinstance@
+--
+-- The parameter @mode@ is a @PrimitiveType@, one of: 'Graphics.GL.Internal.Shared.GL_LINES', 'Graphics.GL.Core32.GL_LINES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_LINE_LOOP', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP', 'Graphics.GL.Core32.GL_LINE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_PATCHES', 'Graphics.GL.Ext.EXT.TessellationShader.GL_PATCHES_EXT', 'Graphics.GL.Internal.Shared.GL_POINTS', 'Graphics.GL.Internal.Shared.GL_POLYGON', 'Graphics.GL.Internal.Shared.GL_QUADS', 'Graphics.GL.Ext.EXT.TessellationShader.GL_QUADS_EXT', 'Graphics.GL.Internal.Shared.GL_QUAD_STRIP', 'Graphics.GL.Internal.Shared.GL_TRIANGLES', 'Graphics.GL.Core32.GL_TRIANGLES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_FAN', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP', 'Graphics.GL.Core32.GL_TRIANGLE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP_ADJACENCY_EXT'.
+--
+-- The length of @indices@ should be @count@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glDrawElementsInstancedBaseVertexBaseInstance'.
+
+
+glDrawElementsInstancedBaseVertexBaseInstanceEXT :: MonadIO m => GLenum -> GLsizei -> GLenum -> Ptr () -> GLsizei -> GLint -> GLuint -> m ()
+glDrawElementsInstancedBaseVertexBaseInstanceEXT = ffienumsizeienumPtrVsizeiintuintIOV glDrawElementsInstancedBaseVertexBaseInstanceEXTFunPtr
+
+glDrawElementsInstancedBaseVertexBaseInstanceEXTFunPtr :: FunPtr (GLenum -> GLsizei -> GLenum -> Ptr () -> GLsizei -> GLint -> GLuint -> IO ())
+glDrawElementsInstancedBaseVertexBaseInstanceEXTFunPtr = unsafePerformIO (getProcAddress "glDrawElementsInstancedBaseVertexBaseInstanceEXT")
+
+{-# NOINLINE glDrawElementsInstancedBaseVertexBaseInstanceEXTFunPtr #-}
diff --git a/dist/build/autogen/Graphics/GL/Ext/EXT/DrawElementsBaseVertex.hs b/dist/build/autogen/Graphics/GL/Ext/EXT/DrawElementsBaseVertex.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/EXT/DrawElementsBaseVertex.hs
@@ -0,0 +1,104 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.EXT.DrawElementsBaseVertex (
+  -- * Extension Support
+    gl_EXT_draw_elements_base_vertex
+
+  -- * GL_EXT_draw_elements_base_vertex
+  , glDrawElementsBaseVertexEXT
+  , glDrawElementsInstancedBaseVertexEXT
+  , glDrawRangeElementsBaseVertexEXT
+  , glMultiDrawElementsBaseVertexEXT
+) where
+
+import Control.Monad.IO.Class
+import Data.Set
+import Foreign.Ptr
+import Graphics.GL.Internal.FFI
+import Graphics.GL.Internal.Proc
+import Graphics.GL.Types
+import System.IO.Unsafe
+
+-- | Checks that the GL_EXT_draw_elements_base_vertex extension is available.
+
+gl_EXT_draw_elements_base_vertex :: Bool
+gl_EXT_draw_elements_base_vertex = member "GL_EXT_draw_elements_base_vertex" extensions
+{-# NOINLINE gl_EXT_draw_elements_base_vertex #-}
+
+-- | Usage: @'glDrawElementsBaseVertexEXT' mode count type indices basevertex@
+--
+-- The parameter @mode@ is a @PrimitiveType@, one of: 'Graphics.GL.Internal.Shared.GL_LINES', 'Graphics.GL.Core32.GL_LINES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_LINE_LOOP', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP', 'Graphics.GL.Core32.GL_LINE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_PATCHES', 'Graphics.GL.Ext.EXT.TessellationShader.GL_PATCHES_EXT', 'Graphics.GL.Internal.Shared.GL_POINTS', 'Graphics.GL.Internal.Shared.GL_POLYGON', 'Graphics.GL.Internal.Shared.GL_QUADS', 'Graphics.GL.Ext.EXT.TessellationShader.GL_QUADS_EXT', 'Graphics.GL.Internal.Shared.GL_QUAD_STRIP', 'Graphics.GL.Internal.Shared.GL_TRIANGLES', 'Graphics.GL.Core32.GL_TRIANGLES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_FAN', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP', 'Graphics.GL.Core32.GL_TRIANGLE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP_ADJACENCY_EXT'.
+--
+-- The parameter @type@ is a @DrawElementsType@.
+--
+-- The length of @indices@ should be @COMPSIZE(count,type)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glDrawElementsBaseVertex'.
+
+
+glDrawElementsBaseVertexEXT :: MonadIO m => GLenum -> GLsizei -> GLenum -> Ptr () -> GLint -> m ()
+glDrawElementsBaseVertexEXT = ffienumsizeienumPtrVintIOV glDrawElementsBaseVertexEXTFunPtr
+
+glDrawElementsBaseVertexEXTFunPtr :: FunPtr (GLenum -> GLsizei -> GLenum -> Ptr () -> GLint -> IO ())
+glDrawElementsBaseVertexEXTFunPtr = unsafePerformIO (getProcAddress "glDrawElementsBaseVertexEXT")
+
+{-# NOINLINE glDrawElementsBaseVertexEXTFunPtr #-}
+
+-- | Usage: @'glDrawElementsInstancedBaseVertexEXT' mode count type indices instancecount basevertex@
+--
+-- The parameter @mode@ is a @PrimitiveType@, one of: 'Graphics.GL.Internal.Shared.GL_LINES', 'Graphics.GL.Core32.GL_LINES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_LINE_LOOP', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP', 'Graphics.GL.Core32.GL_LINE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_PATCHES', 'Graphics.GL.Ext.EXT.TessellationShader.GL_PATCHES_EXT', 'Graphics.GL.Internal.Shared.GL_POINTS', 'Graphics.GL.Internal.Shared.GL_POLYGON', 'Graphics.GL.Internal.Shared.GL_QUADS', 'Graphics.GL.Ext.EXT.TessellationShader.GL_QUADS_EXT', 'Graphics.GL.Internal.Shared.GL_QUAD_STRIP', 'Graphics.GL.Internal.Shared.GL_TRIANGLES', 'Graphics.GL.Core32.GL_TRIANGLES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_FAN', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP', 'Graphics.GL.Core32.GL_TRIANGLE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP_ADJACENCY_EXT'.
+--
+-- The parameter @type@ is a @DrawElementsType@.
+--
+-- The length of @indices@ should be @COMPSIZE(count,type)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glDrawElementsInstancedBaseVertex'.
+
+
+glDrawElementsInstancedBaseVertexEXT :: MonadIO m => GLenum -> GLsizei -> GLenum -> Ptr () -> GLsizei -> GLint -> m ()
+glDrawElementsInstancedBaseVertexEXT = ffienumsizeienumPtrVsizeiintIOV glDrawElementsInstancedBaseVertexEXTFunPtr
+
+glDrawElementsInstancedBaseVertexEXTFunPtr :: FunPtr (GLenum -> GLsizei -> GLenum -> Ptr () -> GLsizei -> GLint -> IO ())
+glDrawElementsInstancedBaseVertexEXTFunPtr = unsafePerformIO (getProcAddress "glDrawElementsInstancedBaseVertexEXT")
+
+{-# NOINLINE glDrawElementsInstancedBaseVertexEXTFunPtr #-}
+
+-- | Usage: @'glDrawRangeElementsBaseVertexEXT' mode start end count type indices basevertex@
+--
+-- The parameter @mode@ is a @PrimitiveType@, one of: 'Graphics.GL.Internal.Shared.GL_LINES', 'Graphics.GL.Core32.GL_LINES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_LINE_LOOP', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP', 'Graphics.GL.Core32.GL_LINE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_LINE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_LINE_STRIP_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_PATCHES', 'Graphics.GL.Ext.EXT.TessellationShader.GL_PATCHES_EXT', 'Graphics.GL.Internal.Shared.GL_POINTS', 'Graphics.GL.Internal.Shared.GL_POLYGON', 'Graphics.GL.Internal.Shared.GL_QUADS', 'Graphics.GL.Ext.EXT.TessellationShader.GL_QUADS_EXT', 'Graphics.GL.Internal.Shared.GL_QUAD_STRIP', 'Graphics.GL.Internal.Shared.GL_TRIANGLES', 'Graphics.GL.Core32.GL_TRIANGLES_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLES_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLES_ADJACENCY_EXT', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_FAN', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP', 'Graphics.GL.Core32.GL_TRIANGLE_STRIP_ADJACENCY', 'Graphics.GL.Ext.ARB.GeometryShader4.GL_TRIANGLE_STRIP_ADJACENCY_ARB', 'Graphics.GL.Internal.Shared.GL_TRIANGLE_STRIP_ADJACENCY_EXT'.
+--
+-- The parameter @type@ is a @DrawElementsType@.
+--
+-- The length of @indices@ should be @COMPSIZE(count,type)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glDrawRangeElementsBaseVertex'.
+
+
+glDrawRangeElementsBaseVertexEXT :: MonadIO m => GLenum -> GLuint -> GLuint -> GLsizei -> GLenum -> Ptr () -> GLint -> m ()
+glDrawRangeElementsBaseVertexEXT = ffienumuintuintsizeienumPtrVintIOV glDrawRangeElementsBaseVertexEXTFunPtr
+
+glDrawRangeElementsBaseVertexEXTFunPtr :: FunPtr (GLenum -> GLuint -> GLuint -> GLsizei -> GLenum -> Ptr () -> GLint -> IO ())
+glDrawRangeElementsBaseVertexEXTFunPtr = unsafePerformIO (getProcAddress "glDrawRangeElementsBaseVertexEXT")
+
+{-# NOINLINE glDrawRangeElementsBaseVertexEXTFunPtr #-}
+
+-- | Usage: @'glMultiDrawElementsBaseVertexEXT' mode count type indices primcount basevertex@
+--
+-- The parameter @type@ is a @DrawElementsType@.
+--
+-- The length of @count@ should be @COMPSIZE(drawcount)@.
+--
+-- The length of @indices@ should be @COMPSIZE(drawcount)@.
+--
+-- The length of @basevertex@ should be @COMPSIZE(drawcount)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glMultiDrawElementsBaseVertex'.
+
+
+glMultiDrawElementsBaseVertexEXT :: MonadIO m => GLenum -> Ptr GLsizei -> GLenum -> Ptr (Ptr ()) -> GLsizei -> Ptr GLint -> m ()
+glMultiDrawElementsBaseVertexEXT = ffienumPtrsizeienumPtrPtrVsizeiPtrintIOV glMultiDrawElementsBaseVertexEXTFunPtr
+
+glMultiDrawElementsBaseVertexEXTFunPtr :: FunPtr (GLenum -> Ptr GLsizei -> GLenum -> Ptr (Ptr ()) -> GLsizei -> Ptr GLint -> IO ())
+glMultiDrawElementsBaseVertexEXTFunPtr = unsafePerformIO (getProcAddress "glMultiDrawElementsBaseVertexEXT")
+
+{-# NOINLINE glMultiDrawElementsBaseVertexEXTFunPtr #-}
diff --git a/dist/build/autogen/Graphics/GL/Ext/EXT/MultiDrawIndirect.hs b/dist/build/autogen/Graphics/GL/Ext/EXT/MultiDrawIndirect.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/EXT/MultiDrawIndirect.hs
@@ -0,0 +1,54 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.EXT.MultiDrawIndirect (
+  -- * Extension Support
+    gl_EXT_multi_draw_indirect
+
+  -- * GL_EXT_multi_draw_indirect
+  , glMultiDrawArraysIndirectEXT
+  , glMultiDrawElementsIndirectEXT
+) where
+
+import Control.Monad.IO.Class
+import Data.Set
+import Foreign.Ptr
+import Graphics.GL.Internal.FFI
+import Graphics.GL.Internal.Proc
+import Graphics.GL.Types
+import System.IO.Unsafe
+
+-- | Checks that the GL_EXT_multi_draw_indirect extension is available.
+
+gl_EXT_multi_draw_indirect :: Bool
+gl_EXT_multi_draw_indirect = member "GL_EXT_multi_draw_indirect" extensions
+{-# NOINLINE gl_EXT_multi_draw_indirect #-}
+
+-- | Usage: @'glMultiDrawArraysIndirectEXT' mode indirect drawcount stride@
+--
+-- The length of @indirect@ should be @COMPSIZE(drawcount,stride)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glMultiDrawArraysIndirect'.
+
+
+glMultiDrawArraysIndirectEXT :: MonadIO m => GLenum -> Ptr () -> GLsizei -> GLsizei -> m ()
+glMultiDrawArraysIndirectEXT = ffienumPtrVsizeisizeiIOV glMultiDrawArraysIndirectEXTFunPtr
+
+glMultiDrawArraysIndirectEXTFunPtr :: FunPtr (GLenum -> Ptr () -> GLsizei -> GLsizei -> IO ())
+glMultiDrawArraysIndirectEXTFunPtr = unsafePerformIO (getProcAddress "glMultiDrawArraysIndirectEXT")
+
+{-# NOINLINE glMultiDrawArraysIndirectEXTFunPtr #-}
+
+-- | Usage: @'glMultiDrawElementsIndirectEXT' mode type indirect drawcount stride@
+--
+-- The length of @indirect@ should be @COMPSIZE(drawcount,stride)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glMultiDrawElementsIndirect'.
+
+
+glMultiDrawElementsIndirectEXT :: MonadIO m => GLenum -> GLenum -> Ptr () -> GLsizei -> GLsizei -> m ()
+glMultiDrawElementsIndirectEXT = ffienumenumPtrVsizeisizeiIOV glMultiDrawElementsIndirectEXTFunPtr
+
+glMultiDrawElementsIndirectEXTFunPtr :: FunPtr (GLenum -> GLenum -> Ptr () -> GLsizei -> GLsizei -> IO ())
+glMultiDrawElementsIndirectEXTFunPtr = unsafePerformIO (getProcAddress "glMultiDrawElementsIndirectEXT")
+
+{-# NOINLINE glMultiDrawElementsIndirectEXTFunPtr #-}
diff --git a/dist/build/autogen/Graphics/GL/Ext/EXT/RenderSnorm.hs b/dist/build/autogen/Graphics/GL/Ext/EXT/RenderSnorm.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/EXT/RenderSnorm.hs
@@ -0,0 +1,26 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.EXT.RenderSnorm (
+  -- * Extension Support
+    gl_EXT_render_snorm
+
+  -- * GL_EXT_render_snorm
+  , pattern GL_BYTE
+  , pattern GL_R16_SNORM_EXT
+  , pattern GL_R8_SNORM
+  , pattern GL_RG16_SNORM_EXT
+  , pattern GL_RG8_SNORM
+  , pattern GL_RGBA16_SNORM_EXT
+  , pattern GL_RGBA8_SNORM
+  , pattern GL_SHORT
+) where
+
+import Data.Set
+import Graphics.GL.Internal.Proc
+import Graphics.GL.Internal.Shared
+
+-- | Checks that the GL_EXT_render_snorm extension is available.
+
+gl_EXT_render_snorm :: Bool
+gl_EXT_render_snorm = member "GL_EXT_render_snorm" extensions
+{-# NOINLINE gl_EXT_render_snorm #-}
diff --git a/dist/build/autogen/Graphics/GL/Ext/EXT/Texture.hs b/dist/build/autogen/Graphics/GL/Ext/EXT/Texture.hs
--- a/dist/build/autogen/Graphics/GL/Ext/EXT/Texture.hs
+++ b/dist/build/autogen/Graphics/GL/Ext/EXT/Texture.hs
@@ -100,8 +100,6 @@
 
 pattern GL_RGB12_EXT = 0x8053
 
-pattern GL_RGB16_EXT = 0x8054
-
 pattern GL_RGB2_EXT = 0x804E
 
 pattern GL_RGB4_EXT = 0x804F
@@ -113,8 +111,6 @@
 pattern GL_RGB8_EXT = 0x8051
 
 pattern GL_RGBA12_EXT = 0x805A
-
-pattern GL_RGBA16_EXT = 0x805B
 
 pattern GL_RGBA2_EXT = 0x8055
 
diff --git a/dist/build/autogen/Graphics/GL/Ext/EXT/TextureNorm16.hs b/dist/build/autogen/Graphics/GL/Ext/EXT/TextureNorm16.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/EXT/TextureNorm16.hs
@@ -0,0 +1,32 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.EXT.TextureNorm16 (
+  -- * Extension Support
+    gl_EXT_texture_norm16
+
+  -- * GL_EXT_texture_norm16
+  , pattern GL_R16_EXT
+  , pattern GL_R16_SNORM_EXT
+  , pattern GL_RG16_EXT
+  , pattern GL_RG16_SNORM_EXT
+  , pattern GL_RGB16_EXT
+  , pattern GL_RGB16_SNORM_EXT
+  , pattern GL_RGBA16_EXT
+  , pattern GL_RGBA16_SNORM_EXT
+) where
+
+import Data.Set
+import Graphics.GL.Internal.Proc
+import Graphics.GL.Internal.Shared
+
+-- | Checks that the GL_EXT_texture_norm16 extension is available.
+
+gl_EXT_texture_norm16 :: Bool
+gl_EXT_texture_norm16 = member "GL_EXT_texture_norm16" extensions
+{-# NOINLINE gl_EXT_texture_norm16 #-}
+
+pattern GL_R16_EXT = 0x822A
+
+pattern GL_RG16_EXT = 0x822C
+
+pattern GL_RGB16_SNORM_EXT = 0x8F9A
diff --git a/dist/build/autogen/Graphics/GL/Ext/NV.hs b/dist/build/autogen/Graphics/GL/Ext/NV.hs
--- a/dist/build/autogen/Graphics/GL/Ext/NV.hs
+++ b/dist/build/autogen/Graphics/GL/Ext/NV.hs
@@ -49,6 +49,7 @@
   , module Graphics.GL.Ext.NV.GpuProgram5MemExtended
   , module Graphics.GL.Ext.NV.GpuShader5
   , module Graphics.GL.Ext.NV.HalfFloat
+  , module Graphics.GL.Ext.NV.ImageFormats
   , module Graphics.GL.Ext.NV.InstancedArrays
   , module Graphics.GL.Ext.NV.InternalformatSampleQuery
   , module Graphics.GL.Ext.NV.LightMaxExponent
@@ -81,6 +82,7 @@
   , module Graphics.GL.Ext.NV.ShaderAtomicInt64
   , module Graphics.GL.Ext.NV.ShaderBufferLoad
   , module Graphics.GL.Ext.NV.ShaderBufferStore
+  , module Graphics.GL.Ext.NV.ShaderNoperspectiveInterpolation
   , module Graphics.GL.Ext.NV.ShaderStorageBufferObject
   , module Graphics.GL.Ext.NV.ShaderThreadGroup
   , module Graphics.GL.Ext.NV.ShaderThreadShuffle
@@ -116,6 +118,7 @@
   , module Graphics.GL.Ext.NV.VertexProgram3
   , module Graphics.GL.Ext.NV.VertexProgram4
   , module Graphics.GL.Ext.NV.VideoCapture
+  , module Graphics.GL.Ext.NV.ViewportArray
 ) where
 
 import Graphics.GL.Ext.NV.BindlessMultiDrawIndirect
@@ -165,6 +168,7 @@
 import Graphics.GL.Ext.NV.GpuProgram5MemExtended
 import Graphics.GL.Ext.NV.GpuShader5
 import Graphics.GL.Ext.NV.HalfFloat
+import Graphics.GL.Ext.NV.ImageFormats
 import Graphics.GL.Ext.NV.InstancedArrays
 import Graphics.GL.Ext.NV.InternalformatSampleQuery
 import Graphics.GL.Ext.NV.LightMaxExponent
@@ -197,6 +201,7 @@
 import Graphics.GL.Ext.NV.ShaderAtomicInt64
 import Graphics.GL.Ext.NV.ShaderBufferLoad
 import Graphics.GL.Ext.NV.ShaderBufferStore
+import Graphics.GL.Ext.NV.ShaderNoperspectiveInterpolation
 import Graphics.GL.Ext.NV.ShaderStorageBufferObject
 import Graphics.GL.Ext.NV.ShaderThreadGroup
 import Graphics.GL.Ext.NV.ShaderThreadShuffle
@@ -232,3 +237,4 @@
 import Graphics.GL.Ext.NV.VertexProgram3
 import Graphics.GL.Ext.NV.VertexProgram4
 import Graphics.GL.Ext.NV.VideoCapture
+import Graphics.GL.Ext.NV.ViewportArray
diff --git a/dist/build/autogen/Graphics/GL/Ext/NV/ImageFormats.hs b/dist/build/autogen/Graphics/GL/Ext/NV/ImageFormats.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/NV/ImageFormats.hs
@@ -0,0 +1,15 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.NV.ImageFormats (
+  -- * Extension Support
+    gl_NV_image_formats
+) where
+
+import Data.Set
+import Graphics.GL.Internal.Proc
+
+-- | Checks that the GL_NV_image_formats extension is available.
+
+gl_NV_image_formats :: Bool
+gl_NV_image_formats = member "GL_NV_image_formats" extensions
+{-# NOINLINE gl_NV_image_formats #-}
diff --git a/dist/build/autogen/Graphics/GL/Ext/NV/ShaderNoperspectiveInterpolation.hs b/dist/build/autogen/Graphics/GL/Ext/NV/ShaderNoperspectiveInterpolation.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/NV/ShaderNoperspectiveInterpolation.hs
@@ -0,0 +1,15 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.NV.ShaderNoperspectiveInterpolation (
+  -- * Extension Support
+    gl_NV_shader_noperspective_interpolation
+) where
+
+import Data.Set
+import Graphics.GL.Internal.Proc
+
+-- | Checks that the GL_NV_shader_noperspective_interpolation extension is available.
+
+gl_NV_shader_noperspective_interpolation :: Bool
+gl_NV_shader_noperspective_interpolation = member "GL_NV_shader_noperspective_interpolation" extensions
+{-# NOINLINE gl_NV_shader_noperspective_interpolation #-}
diff --git a/dist/build/autogen/Graphics/GL/Ext/NV/ViewportArray.hs b/dist/build/autogen/Graphics/GL/Ext/NV/ViewportArray.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Graphics/GL/Ext/NV/ViewportArray.hs
@@ -0,0 +1,215 @@
+-- This file was automatically generated.
+{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
+module Graphics.GL.Ext.NV.ViewportArray (
+  -- * Extension Support
+    gl_NV_viewport_array
+
+  -- * GL_NV_viewport_array
+  , glDepthRangeArrayfvNV
+  , glDepthRangeIndexedfNV
+  , glDisableiNV
+  , glEnableiNV
+  , glGetFloati_vNV
+  , glIsEnablediNV
+  , glScissorArrayvNV
+  , glScissorIndexedNV
+  , glScissorIndexedvNV
+  , glViewportArrayvNV
+  , glViewportIndexedfNV
+  , glViewportIndexedfvNV
+  , pattern GL_DEPTH_RANGE
+  , pattern GL_MAX_VIEWPORTS_NV
+  , pattern GL_SCISSOR_BOX
+  , pattern GL_SCISSOR_TEST
+  , pattern GL_VIEWPORT
+  , pattern GL_VIEWPORT_BOUNDS_RANGE_NV
+  , pattern GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV
+  , pattern GL_VIEWPORT_SUBPIXEL_BITS_NV
+) where
+
+import Control.Monad.IO.Class
+import Data.Set
+import Foreign.Ptr
+import Graphics.GL.Internal.FFI
+import Graphics.GL.Internal.Proc
+import Graphics.GL.Internal.Shared
+import Graphics.GL.Types
+import System.IO.Unsafe
+
+-- | Checks that the GL_NV_viewport_array extension is available.
+
+gl_NV_viewport_array :: Bool
+gl_NV_viewport_array = member "GL_NV_viewport_array" extensions
+{-# NOINLINE gl_NV_viewport_array #-}
+
+-- | Usage: @'glDepthRangeArrayfvNV' first count v@
+
+
+glDepthRangeArrayfvNV :: MonadIO m => GLuint -> GLsizei -> Ptr GLfloat -> m ()
+glDepthRangeArrayfvNV = ffiuintsizeiPtrfloatIOV glDepthRangeArrayfvNVFunPtr
+
+glDepthRangeArrayfvNVFunPtr :: FunPtr (GLuint -> GLsizei -> Ptr GLfloat -> IO ())
+glDepthRangeArrayfvNVFunPtr = unsafePerformIO (getProcAddress "glDepthRangeArrayfvNV")
+
+{-# NOINLINE glDepthRangeArrayfvNVFunPtr #-}
+
+-- | Usage: @'glDepthRangeIndexedfNV' index n f@
+
+
+glDepthRangeIndexedfNV :: MonadIO m => GLuint -> GLfloat -> GLfloat -> m ()
+glDepthRangeIndexedfNV = ffiuintfloatfloatIOV glDepthRangeIndexedfNVFunPtr
+
+glDepthRangeIndexedfNVFunPtr :: FunPtr (GLuint -> GLfloat -> GLfloat -> IO ())
+glDepthRangeIndexedfNVFunPtr = unsafePerformIO (getProcAddress "glDepthRangeIndexedfNV")
+
+{-# NOINLINE glDepthRangeIndexedfNVFunPtr #-}
+
+-- | Usage: @'glDisableiNV' target index@
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glDisablei'.
+
+
+glDisableiNV :: MonadIO m => GLenum -> GLuint -> m ()
+glDisableiNV = ffienumuintIOV glDisableiNVFunPtr
+
+glDisableiNVFunPtr :: FunPtr (GLenum -> GLuint -> IO ())
+glDisableiNVFunPtr = unsafePerformIO (getProcAddress "glDisableiNV")
+
+{-# NOINLINE glDisableiNVFunPtr #-}
+
+-- | Usage: @'glEnableiNV' target index@
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glEnablei'.
+
+
+glEnableiNV :: MonadIO m => GLenum -> GLuint -> m ()
+glEnableiNV = ffienumuintIOV glEnableiNVFunPtr
+
+glEnableiNVFunPtr :: FunPtr (GLenum -> GLuint -> IO ())
+glEnableiNVFunPtr = unsafePerformIO (getProcAddress "glEnableiNV")
+
+{-# NOINLINE glEnableiNVFunPtr #-}
+
+-- | Usage: @'glGetFloati_vNV' target index data@
+--
+-- The parameter @target@ is a @TypeEnum@.
+--
+-- The length of @data@ should be @COMPSIZE(target)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glGetFloati_v'.
+
+
+glGetFloati_vNV :: MonadIO m => GLenum -> GLuint -> Ptr GLfloat -> m ()
+glGetFloati_vNV = ffienumuintPtrfloatIOV glGetFloati_vNVFunPtr
+
+glGetFloati_vNVFunPtr :: FunPtr (GLenum -> GLuint -> Ptr GLfloat -> IO ())
+glGetFloati_vNVFunPtr = unsafePerformIO (getProcAddress "glGetFloati_vNV")
+
+{-# NOINLINE glGetFloati_vNVFunPtr #-}
+
+-- | Usage: @'glIsEnablediNV' target index@
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glIsEnabledi'.
+
+
+glIsEnablediNV :: MonadIO m => GLenum -> GLuint -> m GLboolean
+glIsEnablediNV = ffienumuintIOboolean glIsEnablediNVFunPtr
+
+glIsEnablediNVFunPtr :: FunPtr (GLenum -> GLuint -> IO GLboolean)
+glIsEnablediNVFunPtr = unsafePerformIO (getProcAddress "glIsEnablediNV")
+
+{-# NOINLINE glIsEnablediNVFunPtr #-}
+
+-- | Usage: @'glScissorArrayvNV' first count v@
+--
+-- The length of @v@ should be @COMPSIZE(count)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glScissorArrayv'.
+
+
+glScissorArrayvNV :: MonadIO m => GLuint -> GLsizei -> Ptr GLint -> m ()
+glScissorArrayvNV = ffiuintsizeiPtrintIOV glScissorArrayvNVFunPtr
+
+glScissorArrayvNVFunPtr :: FunPtr (GLuint -> GLsizei -> Ptr GLint -> IO ())
+glScissorArrayvNVFunPtr = unsafePerformIO (getProcAddress "glScissorArrayvNV")
+
+{-# NOINLINE glScissorArrayvNVFunPtr #-}
+
+-- | Usage: @'glScissorIndexedNV' index left bottom width height@
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glScissorIndexed'.
+
+
+glScissorIndexedNV :: MonadIO m => GLuint -> GLint -> GLint -> GLsizei -> GLsizei -> m ()
+glScissorIndexedNV = ffiuintintintsizeisizeiIOV glScissorIndexedNVFunPtr
+
+glScissorIndexedNVFunPtr :: FunPtr (GLuint -> GLint -> GLint -> GLsizei -> GLsizei -> IO ())
+glScissorIndexedNVFunPtr = unsafePerformIO (getProcAddress "glScissorIndexedNV")
+
+{-# NOINLINE glScissorIndexedNVFunPtr #-}
+
+-- | Usage: @'glScissorIndexedvNV' index v@
+--
+-- The length of @v@ should be @4@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glScissorIndexedv'.
+
+
+glScissorIndexedvNV :: MonadIO m => GLuint -> Ptr GLint -> m ()
+glScissorIndexedvNV = ffiuintPtrintIOV glScissorIndexedvNVFunPtr
+
+glScissorIndexedvNVFunPtr :: FunPtr (GLuint -> Ptr GLint -> IO ())
+glScissorIndexedvNVFunPtr = unsafePerformIO (getProcAddress "glScissorIndexedvNV")
+
+{-# NOINLINE glScissorIndexedvNVFunPtr #-}
+
+-- | Usage: @'glViewportArrayvNV' first count v@
+--
+-- The length of @v@ should be @COMPSIZE(count)@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glViewportArrayv'.
+
+
+glViewportArrayvNV :: MonadIO m => GLuint -> GLsizei -> Ptr GLfloat -> m ()
+glViewportArrayvNV = ffiuintsizeiPtrfloatIOV glViewportArrayvNVFunPtr
+
+glViewportArrayvNVFunPtr :: FunPtr (GLuint -> GLsizei -> Ptr GLfloat -> IO ())
+glViewportArrayvNVFunPtr = unsafePerformIO (getProcAddress "glViewportArrayvNV")
+
+{-# NOINLINE glViewportArrayvNVFunPtr #-}
+
+-- | Usage: @'glViewportIndexedfNV' index x y w h@
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glViewportIndexedf'.
+
+
+glViewportIndexedfNV :: MonadIO m => GLuint -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> m ()
+glViewportIndexedfNV = ffiuintfloatfloatfloatfloatIOV glViewportIndexedfNVFunPtr
+
+glViewportIndexedfNVFunPtr :: FunPtr (GLuint -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ())
+glViewportIndexedfNVFunPtr = unsafePerformIO (getProcAddress "glViewportIndexedfNV")
+
+{-# NOINLINE glViewportIndexedfNVFunPtr #-}
+
+-- | Usage: @'glViewportIndexedfvNV' index v@
+--
+-- The length of @v@ should be @4@.
+--
+-- This command is an alias for 'Graphics.GL.Internal.Shared.glViewportIndexedfv'.
+
+
+glViewportIndexedfvNV :: MonadIO m => GLuint -> Ptr GLfloat -> m ()
+glViewportIndexedfvNV = ffiuintPtrfloatIOV glViewportIndexedfvNVFunPtr
+
+glViewportIndexedfvNVFunPtr :: FunPtr (GLuint -> Ptr GLfloat -> IO ())
+glViewportIndexedfvNVFunPtr = unsafePerformIO (getProcAddress "glViewportIndexedfvNV")
+
+{-# NOINLINE glViewportIndexedfvNVFunPtr #-}
+
+pattern GL_MAX_VIEWPORTS_NV = 0x825B
+
+pattern GL_VIEWPORT_BOUNDS_RANGE_NV = 0x825D
+
+pattern GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV = 0x825F
+
+pattern GL_VIEWPORT_SUBPIXEL_BITS_NV = 0x825C
diff --git a/dist/build/autogen/Graphics/GL/Internal/FFI.hs b/dist/build/autogen/Graphics/GL/Internal/FFI.hs
--- a/dist/build/autogen/Graphics/GL/Internal/FFI.hs
+++ b/dist/build/autogen/Graphics/GL/Internal/FFI.hs
@@ -219,8 +219,10 @@
   , ffisyncIOV
   , fficlampdclampdIOV
   , ffidoubledoubleIOV
+  , ffiuintsizeiPtrfloatIOV
   , ffiuintsizeiPtrdoubleIOV
   , ffiuintdoubledoubleIOV
+  , ffiuintfloatfloatIOV
   , ffifloatfloatIOV
   , fficlampfclampfIOV
   , ffifixedfixedIOV
@@ -588,7 +590,6 @@
   , ffiuintuintenumIOV
   , ffiuintsizeiPtrubytesizeienumPtrVIOV
   , ffiuintsizeienumPtrVIOV
-  , ffiuintsizeiPtrfloatIOV
   , ffiuintenumPtrVbitfielduintsizeiuintfloatIOenum
   , ffienumPtrVbitfielduintfloatuintIOenum
   , ffiuintenumPtrVbitfielduintsizeienumuintfloatIOV
@@ -822,7 +823,6 @@
   , ffiuinthalfNVIOV
   , ffiuintPtrhalfNVIOV
   , ffiuintshortIOV
-  , ffiuintfloatfloatIOV
   , ffiuinthalfNVhalfNVIOV
   , ffiuintshortshortIOV
   , ffiuintdoubledoubledoubleIOV
@@ -1958,6 +1958,11 @@
 ffidoubledoubleIOV :: MonadIO m => FunPtr (GLdouble -> GLdouble -> IO ()) -> GLdouble -> GLdouble -> m ()
 ffidoubledoubleIOV fp v0 v1 = liftIO (dyndoubledoubleIOV fp v0 v1)
 
+foreign import ccall "dynamic" dynuintsizeiPtrfloatIOV :: FunPtr (GLuint -> GLsizei -> Ptr GLfloat -> IO ()) -> GLuint -> GLsizei -> Ptr GLfloat -> IO ()
+
+ffiuintsizeiPtrfloatIOV :: MonadIO m => FunPtr (GLuint -> GLsizei -> Ptr GLfloat -> IO ()) -> GLuint -> GLsizei -> Ptr GLfloat -> m ()
+ffiuintsizeiPtrfloatIOV fp v0 v1 v2 = liftIO (dynuintsizeiPtrfloatIOV fp v0 v1 v2)
+
 foreign import ccall "dynamic" dynuintsizeiPtrdoubleIOV :: FunPtr (GLuint -> GLsizei -> Ptr GLdouble -> IO ()) -> GLuint -> GLsizei -> Ptr GLdouble -> IO ()
 
 ffiuintsizeiPtrdoubleIOV :: MonadIO m => FunPtr (GLuint -> GLsizei -> Ptr GLdouble -> IO ()) -> GLuint -> GLsizei -> Ptr GLdouble -> m ()
@@ -1968,6 +1973,11 @@
 ffiuintdoubledoubleIOV :: MonadIO m => FunPtr (GLuint -> GLdouble -> GLdouble -> IO ()) -> GLuint -> GLdouble -> GLdouble -> m ()
 ffiuintdoubledoubleIOV fp v0 v1 v2 = liftIO (dynuintdoubledoubleIOV fp v0 v1 v2)
 
+foreign import ccall "dynamic" dynuintfloatfloatIOV :: FunPtr (GLuint -> GLfloat -> GLfloat -> IO ()) -> GLuint -> GLfloat -> GLfloat -> IO ()
+
+ffiuintfloatfloatIOV :: MonadIO m => FunPtr (GLuint -> GLfloat -> GLfloat -> IO ()) -> GLuint -> GLfloat -> GLfloat -> m ()
+ffiuintfloatfloatIOV fp v0 v1 v2 = liftIO (dynuintfloatfloatIOV fp v0 v1 v2)
+
 foreign import ccall "dynamic" dynfloatfloatIOV :: FunPtr (GLfloat -> GLfloat -> IO ()) -> GLfloat -> GLfloat -> IO ()
 
 ffifloatfloatIOV :: MonadIO m => FunPtr (GLfloat -> GLfloat -> IO ()) -> GLfloat -> GLfloat -> m ()
@@ -3803,11 +3813,6 @@
 ffiuintsizeienumPtrVIOV :: MonadIO m => FunPtr (GLuint -> GLsizei -> GLenum -> Ptr () -> IO ()) -> GLuint -> GLsizei -> GLenum -> Ptr () -> m ()
 ffiuintsizeienumPtrVIOV fp v0 v1 v2 v3 = liftIO (dynuintsizeienumPtrVIOV fp v0 v1 v2 v3)
 
-foreign import ccall "dynamic" dynuintsizeiPtrfloatIOV :: FunPtr (GLuint -> GLsizei -> Ptr GLfloat -> IO ()) -> GLuint -> GLsizei -> Ptr GLfloat -> IO ()
-
-ffiuintsizeiPtrfloatIOV :: MonadIO m => FunPtr (GLuint -> GLsizei -> Ptr GLfloat -> IO ()) -> GLuint -> GLsizei -> Ptr GLfloat -> m ()
-ffiuintsizeiPtrfloatIOV fp v0 v1 v2 = liftIO (dynuintsizeiPtrfloatIOV fp v0 v1 v2)
-
 foreign import ccall "dynamic" dynuintenumPtrVbitfielduintsizeiuintfloatIOenum :: FunPtr (GLuint -> GLenum -> Ptr () -> GLbitfield -> GLuint -> GLsizei -> GLuint -> GLfloat -> IO GLenum) -> GLuint -> GLenum -> Ptr () -> GLbitfield -> GLuint -> GLsizei -> GLuint -> GLfloat -> IO GLenum
 
 ffiuintenumPtrVbitfielduintsizeiuintfloatIOenum :: MonadIO m => FunPtr (GLuint -> GLenum -> Ptr () -> GLbitfield -> GLuint -> GLsizei -> GLuint -> GLfloat -> IO GLenum) -> GLuint -> GLenum -> Ptr () -> GLbitfield -> GLuint -> GLsizei -> GLuint -> GLfloat -> m GLenum
@@ -4972,11 +4977,6 @@
 
 ffiuintshortIOV :: MonadIO m => FunPtr (GLuint -> GLshort -> IO ()) -> GLuint -> GLshort -> m ()
 ffiuintshortIOV fp v0 v1 = liftIO (dynuintshortIOV fp v0 v1)
-
-foreign import ccall "dynamic" dynuintfloatfloatIOV :: FunPtr (GLuint -> GLfloat -> GLfloat -> IO ()) -> GLuint -> GLfloat -> GLfloat -> IO ()
-
-ffiuintfloatfloatIOV :: MonadIO m => FunPtr (GLuint -> GLfloat -> GLfloat -> IO ()) -> GLuint -> GLfloat -> GLfloat -> m ()
-ffiuintfloatfloatIOV fp v0 v1 v2 = liftIO (dynuintfloatfloatIOV fp v0 v1 v2)
 
 foreign import ccall "dynamic" dynuinthalfNVhalfNVIOV :: FunPtr (GLuint -> GLhalfNV -> GLhalfNV -> IO ()) -> GLuint -> GLhalfNV -> GLhalfNV -> IO ()
 
diff --git a/dist/build/autogen/Graphics/GL/Internal/Shared.hs b/dist/build/autogen/Graphics/GL/Internal/Shared.hs
--- a/dist/build/autogen/Graphics/GL/Internal/Shared.hs
+++ b/dist/build/autogen/Graphics/GL/Internal/Shared.hs
@@ -21134,6 +21134,12 @@
 
 pattern GL_RASTER_SAMPLES_EXT = 0x9328
 
+pattern GL_R16_SNORM_EXT = 0x8F98
+
+pattern GL_RG16_SNORM_EXT = 0x8F99
+
+pattern GL_RGBA16_SNORM_EXT = 0x8F9B
+
 pattern GL_SRGB8_ALPHA8_EXT = 0x8C43
 
 pattern GL_SRGB_ALPHA_EXT = 0x8C42
@@ -21161,6 +21167,10 @@
 pattern GL_RGB10_A2_EXT = 0x8059
 
 pattern GL_RGB10_EXT = 0x8052
+
+pattern GL_RGB16_EXT = 0x8054
+
+pattern GL_RGBA16_EXT = 0x805B
 
 -- | Usage: @'glFramebufferTextureLayerEXT' target attachment texture level layer@
 --
diff --git a/gl.cabal b/gl.cabal
--- a/gl.cabal
+++ b/gl.cabal
@@ -1,5 +1,5 @@
 name:          gl
-version:       0.6
+version:       0.6.1
 synopsis:      Complete OpenGL raw bindings
 description:   Complete OpenGL raw bindings
 license:       BSD3
@@ -349,6 +349,7 @@
     Graphics.GL.Ext.DMP.ShaderBinary
     Graphics.GL.Ext.EXT
     Graphics.GL.Ext.EXT.Abgr
+    Graphics.GL.Ext.EXT.BaseInstance
     Graphics.GL.Ext.EXT.Bgra
     Graphics.GL.Ext.EXT.BindableUniform
     Graphics.GL.Ext.EXT.BlendColor
@@ -376,6 +377,7 @@
     Graphics.GL.Ext.EXT.DrawBuffers
     Graphics.GL.Ext.EXT.DrawBuffers2
     Graphics.GL.Ext.EXT.DrawBuffersIndexed
+    Graphics.GL.Ext.EXT.DrawElementsBaseVertex
     Graphics.GL.Ext.EXT.DrawInstanced
     Graphics.GL.Ext.EXT.DrawRangeElements
     Graphics.GL.Ext.EXT.FogCoord
@@ -401,6 +403,7 @@
     Graphics.GL.Ext.EXT.MapBufferRange
     Graphics.GL.Ext.EXT.MiscAttribute
     Graphics.GL.Ext.EXT.MultiDrawArrays
+    Graphics.GL.Ext.EXT.MultiDrawIndirect
     Graphics.GL.Ext.EXT.Multisample
     Graphics.GL.Ext.EXT.MultisampledRenderToTexture
     Graphics.GL.Ext.EXT.MultiviewDrawBuffers
@@ -421,6 +424,7 @@
     Graphics.GL.Ext.EXT.PvrtcSRGB
     Graphics.GL.Ext.EXT.RasterMultisample
     Graphics.GL.Ext.EXT.ReadFormatBgra
+    Graphics.GL.Ext.EXT.RenderSnorm
     Graphics.GL.Ext.EXT.RescaleNormal
     Graphics.GL.Ext.EXT.Robustness
     Graphics.GL.Ext.EXT.SRGB
@@ -467,6 +471,7 @@
     Graphics.GL.Ext.EXT.TextureInteger
     Graphics.GL.Ext.EXT.TextureLodBias
     Graphics.GL.Ext.EXT.TextureMirrorClamp
+    Graphics.GL.Ext.EXT.TextureNorm16
     Graphics.GL.Ext.EXT.TextureObject
     Graphics.GL.Ext.EXT.TexturePerturbNormal
     Graphics.GL.Ext.EXT.TextureRg
@@ -586,6 +591,7 @@
     Graphics.GL.Ext.NV.GpuProgram5MemExtended
     Graphics.GL.Ext.NV.GpuShader5
     Graphics.GL.Ext.NV.HalfFloat
+    Graphics.GL.Ext.NV.ImageFormats
     Graphics.GL.Ext.NV.InstancedArrays
     Graphics.GL.Ext.NV.InternalformatSampleQuery
     Graphics.GL.Ext.NV.LightMaxExponent
@@ -618,6 +624,7 @@
     Graphics.GL.Ext.NV.ShaderAtomicInt64
     Graphics.GL.Ext.NV.ShaderBufferLoad
     Graphics.GL.Ext.NV.ShaderBufferStore
+    Graphics.GL.Ext.NV.ShaderNoperspectiveInterpolation
     Graphics.GL.Ext.NV.ShaderStorageBufferObject
     Graphics.GL.Ext.NV.ShaderThreadGroup
     Graphics.GL.Ext.NV.ShaderThreadShuffle
@@ -653,6 +660,7 @@
     Graphics.GL.Ext.NV.VertexProgram3
     Graphics.GL.Ext.NV.VertexProgram4
     Graphics.GL.Ext.NV.VideoCapture
+    Graphics.GL.Ext.NV.ViewportArray
     Graphics.GL.Ext.NVX
     Graphics.GL.Ext.NVX.ConditionalRender
     Graphics.GL.Ext.NVX.GpuMemoryInfo
diff --git a/gl.xml b/gl.xml
# file too large to diff: gl.xml
