diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+3.2.0.0
+-------
+* Updated OpenGL registry to r32749.
+
+3.1.0.1
+-------
+* Updated warning flag magic for GHC 8.0.
+* Updated OpenGL registry to r32363.
+
 3.1.0.0
 -------
 * Changed the type of `GL_FALSE` and `GL_TRUE` to `GLboolean`, leading to fewer
diff --git a/OpenGLRaw.cabal b/OpenGLRaw.cabal
--- a/OpenGLRaw.cabal
+++ b/OpenGLRaw.cabal
@@ -1,5 +1,5 @@
 name: OpenGLRaw
-version: 3.1.0.0
+version: 3.2.0.0
 synopsis: A raw binding for the OpenGL graphics system
 description:
   OpenGLRaw is a raw Haskell binding for the OpenGL 4.5 graphics system and
@@ -27,6 +27,11 @@
 maintainer: Sven Panne <svenpanne@gmail.com>, Jason Dagit <dagitj@gmail.com>
 category: Graphics
 build-type: Simple
+tested-with:
+  GHC == 7.8.4
+  GHC == 7.10.3
+  GHC == 8.0.1
+  GHC == 8.1
 cabal-version: >= 1.10
 extra-source-files:
   CHANGELOG.md
@@ -489,6 +494,7 @@
     Graphics.GL.NV.VertexProgram3
     Graphics.GL.NV.VertexProgram4
     Graphics.GL.NV.VideoCapture
+    Graphics.GL.NV.ViewportSwizzle
     Graphics.GL.NVX
     Graphics.GL.NVX.ConditionalRender
     Graphics.GL.NVX.GPUMemoryInfo
@@ -611,6 +617,8 @@
     transformers >= 0.2     && < 0.6
   default-language: Haskell2010
   ghc-options: -Wall
+  if impl(ghc > 8)
+    ghc-options: -Wcompat
   other-extensions:
     CPP
     PatternSynonyms
diff --git a/RegistryProcessor/OpenGL-Registry/gl.xml b/RegistryProcessor/OpenGL-Registry/gl.xml
# file too large to diff: RegistryProcessor/OpenGL-Registry/gl.xml
diff --git a/RegistryProcessor/src/Main.hs b/RegistryProcessor/src/Main.hs
--- a/RegistryProcessor/src/Main.hs
+++ b/RegistryProcessor/src/Main.hs
@@ -77,7 +77,7 @@
   let comment =
         ["All enumeration tokens from the",
          "<http://www.opengl.org/registry/ OpenGL registry>."]
-  startModule ["Tokens"] (Just "{-# LANGUAGE PatternSynonyms, ScopedTypeVariables #-}") comment $ \moduleName h -> do
+  startModule ["Tokens"] (Just "{-# LANGUAGE CPP, PatternSynonyms, ScopedTypeVariables #-}\n#if __GLASGOW_HASKELL__ >= 800\n{-# OPTIONS_GHC -Wno-missing-pattern-synonym-signatures #-}\n#endif") comment $ \moduleName h -> do
     SI.hPutStrLn h $ "module " ++ moduleName ++ " where"
     SI.hPutStrLn h ""
     SI.hPutStrLn h $ "import " ++ moduleNameFor ["Types"]
diff --git a/src/Graphics/GL/ExtensionPredicates.hs b/src/Graphics/GL/ExtensionPredicates.hs
--- a/src/Graphics/GL/ExtensionPredicates.hs
+++ b/src/Graphics/GL/ExtensionPredicates.hs
@@ -4254,6 +4254,17 @@
 gl_NV_video_capture = member "GL_NV_video_capture" extensions
 {-# NOINLINE gl_NV_video_capture #-}
 
+-- | Is the <https://www.opengl.org/registry/specs/NV/viewport_swizzle.txt NV_viewport_swizzle> extension supported?
+glGetNVViewportSwizzle :: MonadIO m => m Bool
+glGetNVViewportSwizzle = getExtensions >>= (return . member "GL_NV_viewport_swizzle")
+
+-- | Is the <https://www.opengl.org/registry/specs/NV/viewport_swizzle.txt NV_viewport_swizzle> extension supported?
+-- Note that in the presence of multiple contexts with different capabilities,
+-- this might be wrong. Use 'glGetNVViewportSwizzle' in those cases instead.
+gl_NV_viewport_swizzle :: Bool
+gl_NV_viewport_swizzle = member "GL_NV_viewport_swizzle" extensions
+{-# NOINLINE gl_NV_viewport_swizzle #-}
+
 -- | Is the <https://www.opengl.org/registry/specs/NVX/nvx_conditional_render.txt NVX_conditional_render> extension supported?
 glGetNVXConditionalRender :: MonadIO m => m Bool
 glGetNVXConditionalRender = getExtensions >>= (return . member "GL_NVX_conditional_render")
diff --git a/src/Graphics/GL/Functions.hs b/src/Graphics/GL/Functions.hs
--- a/src/Graphics/GL/Functions.hs
+++ b/src/Graphics/GL/Functions.hs
@@ -3080,6 +3080,7 @@
   glViewportIndexedfNV,
   glViewportIndexedfv,
   glViewportIndexedfvNV,
+  glViewportSwizzleNV,
   glWaitSync,
   glWaitSyncAPPLE,
   glWeightPathsNV,
@@ -48611,6 +48612,22 @@
 {-# NOINLINE ptr_glViewportIndexedfvNV #-}
 ptr_glViewportIndexedfvNV :: FunPtr (GLuint -> Ptr GLfloat -> IO ())
 ptr_glViewportIndexedfvNV = unsafePerformIO $ getCommand "glViewportIndexedfvNV"
+
+-- glViewportSwizzleNV ---------------------------------------------------------
+
+glViewportSwizzleNV
+  :: MonadIO m
+  => GLuint -- ^ @index@.
+  -> GLenum -- ^ @swizzlex@.
+  -> GLenum -- ^ @swizzley@.
+  -> GLenum -- ^ @swizzlez@.
+  -> GLenum -- ^ @swizzlew@.
+  -> m ()
+glViewportSwizzleNV v1 v2 v3 v4 v5 = liftIO $ dyn54 ptr_glViewportSwizzleNV v1 v2 v3 v4 v5
+
+{-# NOINLINE ptr_glViewportSwizzleNV #-}
+ptr_glViewportSwizzleNV :: FunPtr (GLuint -> GLenum -> GLenum -> GLenum -> GLenum -> IO ())
+ptr_glViewportSwizzleNV = unsafePerformIO $ getCommand "glViewportSwizzleNV"
 
 -- glWaitSync ------------------------------------------------------------------
 
diff --git a/src/Graphics/GL/Groups.hs b/src/Graphics/GL/Groups.hs
--- a/src/Graphics/GL/Groups.hs
+++ b/src/Graphics/GL/Groups.hs
@@ -201,6 +201,7 @@
 -- * 'Graphics.GL.Tokens.GL_CONTEXT_FLAG_DEBUG_BIT' (alias: 'Graphics.GL.Tokens.GL_CONTEXT_FLAG_DEBUG_BIT_KHR')
 -- * 'Graphics.GL.Tokens.GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT'
 -- * 'Graphics.GL.Tokens.GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB'
+-- * 'Graphics.GL.Tokens.GL_CONTEXT_FLAG_PROTECTED_CONTENT_BIT_EXT'
 --
 -- === #ContextProfileMask# ContextProfileMask
 -- A bitwise combination of several of the following values:
diff --git a/src/Graphics/GL/NV.hs b/src/Graphics/GL/NV.hs
--- a/src/Graphics/GL/NV.hs
+++ b/src/Graphics/GL/NV.hs
@@ -88,7 +88,8 @@
   module Graphics.GL.NV.VertexProgram2Option,
   module Graphics.GL.NV.VertexProgram3,
   module Graphics.GL.NV.VertexProgram4,
-  module Graphics.GL.NV.VideoCapture
+  module Graphics.GL.NV.VideoCapture,
+  module Graphics.GL.NV.ViewportSwizzle
 ) where
 
 import Graphics.GL.NV.BindlessMultiDrawIndirect
@@ -167,3 +168,4 @@
 import Graphics.GL.NV.VertexProgram3
 import Graphics.GL.NV.VertexProgram4
 import Graphics.GL.NV.VideoCapture
+import Graphics.GL.NV.ViewportSwizzle
diff --git a/src/Graphics/GL/NV/ViewportSwizzle.hs b/src/Graphics/GL/NV/ViewportSwizzle.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/GL/NV/ViewportSwizzle.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE PatternSynonyms #-}
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Graphics.GL.NV.ViewportSwizzle
+-- Copyright   :  (c) Sven Panne 2016
+-- License     :  BSD3
+--
+-- Maintainer  :  Sven Panne <svenpanne@gmail.com>
+-- Stability   :  stable
+-- Portability :  portable
+--
+--------------------------------------------------------------------------------
+
+module Graphics.GL.NV.ViewportSwizzle (
+  -- * Extension Support
+  glGetNVViewportSwizzle,
+  gl_NV_viewport_swizzle,
+  -- * Enums
+  pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV,
+  pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV,
+  pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV,
+  pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV,
+  pattern GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV,
+  pattern GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV,
+  pattern GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV,
+  pattern GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV,
+  pattern GL_VIEWPORT_SWIZZLE_W_NV,
+  pattern GL_VIEWPORT_SWIZZLE_X_NV,
+  pattern GL_VIEWPORT_SWIZZLE_Y_NV,
+  pattern GL_VIEWPORT_SWIZZLE_Z_NV,
+  -- * Functions
+  glViewportSwizzleNV
+) where
+
+import Graphics.GL.ExtensionPredicates
+import Graphics.GL.Tokens
+import Graphics.GL.Functions
diff --git a/src/Graphics/GL/Tokens.hs b/src/Graphics/GL/Tokens.hs
--- a/src/Graphics/GL/Tokens.hs
+++ b/src/Graphics/GL/Tokens.hs
@@ -1,4 +1,7 @@
-{-# LANGUAGE PatternSynonyms, ScopedTypeVariables #-}
+{-# LANGUAGE CPP, PatternSynonyms, ScopedTypeVariables #-}
+#if __GLASGOW_HASKELL__ >= 800
+{-# OPTIONS_GHC -Wno-missing-pattern-synonym-signatures #-}
+#endif
 --------------------------------------------------------------------------------
 -- |
 -- Module      :  Graphics.GL.Tokens
@@ -736,34 +739,50 @@
 
 pattern GL_CLIP_DISTANCE0_APPLE = 0x3000 :: GLenum
 
+pattern GL_CLIP_DISTANCE0_EXT = 0x3000 :: GLenum
+
 pattern GL_CLIP_DISTANCE1 = 0x3001 :: GLenum
 
 pattern GL_CLIP_DISTANCE1_APPLE = 0x3001 :: GLenum
 
+pattern GL_CLIP_DISTANCE1_EXT = 0x3001 :: GLenum
+
 pattern GL_CLIP_DISTANCE2 = 0x3002 :: GLenum
 
 pattern GL_CLIP_DISTANCE2_APPLE = 0x3002 :: GLenum
 
+pattern GL_CLIP_DISTANCE2_EXT = 0x3002 :: GLenum
+
 pattern GL_CLIP_DISTANCE3 = 0x3003 :: GLenum
 
 pattern GL_CLIP_DISTANCE3_APPLE = 0x3003 :: GLenum
 
+pattern GL_CLIP_DISTANCE3_EXT = 0x3003 :: GLenum
+
 pattern GL_CLIP_DISTANCE4 = 0x3004 :: GLenum
 
 pattern GL_CLIP_DISTANCE4_APPLE = 0x3004 :: GLenum
 
+pattern GL_CLIP_DISTANCE4_EXT = 0x3004 :: GLenum
+
 pattern GL_CLIP_DISTANCE5 = 0x3005 :: GLenum
 
 pattern GL_CLIP_DISTANCE5_APPLE = 0x3005 :: GLenum
 
+pattern GL_CLIP_DISTANCE5_EXT = 0x3005 :: GLenum
+
 pattern GL_CLIP_DISTANCE6 = 0x3006 :: GLenum
 
 pattern GL_CLIP_DISTANCE6_APPLE = 0x3006 :: GLenum
 
+pattern GL_CLIP_DISTANCE6_EXT = 0x3006 :: GLenum
+
 pattern GL_CLIP_DISTANCE7 = 0x3007 :: GLenum
 
 pattern GL_CLIP_DISTANCE7_APPLE = 0x3007 :: GLenum
 
+pattern GL_CLIP_DISTANCE7_EXT = 0x3007 :: GLenum
+
 pattern GL_CLIP_DISTANCE_NV = 0x8C7A :: GLenum
 
 pattern GL_CLIP_FAR_HINT_PGI = 0x1A221 :: GLenum
@@ -1620,6 +1639,8 @@
 
 pattern GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR = 0x00000008 :: GLbitfield
 
+pattern GL_CONTEXT_FLAG_PROTECTED_CONTENT_BIT_EXT = 0x00000010 :: GLbitfield
+
 pattern GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT = 0x00000004 :: GLbitfield
 
 pattern GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB = 0x00000004 :: GLbitfield
@@ -4976,6 +4997,8 @@
 
 pattern GL_MAX_CLIP_DISTANCES_APPLE = 0x0D32 :: GLenum
 
+pattern GL_MAX_CLIP_DISTANCES_EXT = 0x0D32 :: GLenum
+
 pattern GL_MAX_CLIP_PLANES = 0x0D32 :: GLenum
 
 pattern GL_MAX_CLIP_PLANES_IMG = 0x0D32 :: GLenum
@@ -4998,6 +5021,8 @@
 
 pattern GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES = 0x82FA :: GLenum
 
+pattern GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT = 0x82FA :: GLenum
+
 pattern GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x8266 :: GLenum
 
 pattern GL_MAX_COMBINED_DIMENSIONS = 0x8282 :: GLenum
@@ -5088,6 +5113,8 @@
 
 pattern GL_MAX_CULL_DISTANCES = 0x82F9 :: GLenum
 
+pattern GL_MAX_CULL_DISTANCES_EXT = 0x82F9 :: GLenum
+
 pattern GL_MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C :: GLenum
 
 pattern GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR = 0x826C :: GLenum
@@ -9922,6 +9949,8 @@
 
 pattern GL_TEXTURE_PRIORITY_EXT = 0x8066 :: GLenum
 
+pattern GL_TEXTURE_PROTECTED_EXT = 0x8BFA :: GLenum
+
 pattern GL_TEXTURE_RANGE_LENGTH_APPLE = 0x85B7 :: GLenum
 
 pattern GL_TEXTURE_RANGE_POINTER_APPLE = 0x85B8 :: GLenum
@@ -11077,6 +11106,30 @@
 pattern GL_VIEWPORT_SUBPIXEL_BITS_EXT = 0x825C :: GLenum
 
 pattern GL_VIEWPORT_SUBPIXEL_BITS_NV = 0x825C :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV = 0x9357 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV = 0x9351 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV = 0x9353 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV = 0x9355 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV = 0x9356 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV = 0x9350 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV = 0x9352 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV = 0x9354 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_W_NV = 0x935B :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_X_NV = 0x9358 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_Y_NV = 0x9359 :: GLenum
+
+pattern GL_VIEWPORT_SWIZZLE_Z_NV = 0x935A :: GLenum
 
 pattern GL_VIEW_CLASS_128_BITS = 0x82C4 :: GLenum
 
